PHP と GMP を使用して大数のルーカス・レーマー素数性テストを実装する方法
はじめに:
ルーカス・レーマー素数性テストは、メルセンヌ数の素数性を検出するためのアルゴリズムです。数論と暗号の分野で広く使用されています。メルセンヌ数は 2^n - 1 の形式の整数です。n は正の整数です。この記事では、PHP および GMP ライブラリを使用して、大きな数のルーカス・レーマー素数検定を実装し、メルセンヌ数が素数かどうかを判断する方法を紹介します。
function lucasLehmerTest($n) { $s = gmp_init(4); $m = gmp_sub(gmp_pow(2, $n), 1); for ($i = 0; $i < $n - 2; $i++) { $s = gmp_mod(gmp_sub(gmp_mul($s, $s), 2), $m); } return gmp_cmp($s, 0) == 0; }
上記の関数は、メルセンヌ数の累乗を表すパラメーター n を受け入れます。この関数は内部でループを使用して Lucas-Lehmer シーケンスの各項目を計算し、最後の項目が 0 であるかどうかを判断します。 true を返す場合はメルセンヌ数が素数であることを意味し、false を返す場合はメルセンヌ数が素数ではないことを意味します。
$n = 29; // 选取一个合适的幂次,这里以29为例 $isPrime = lucasLehmerTest($n); if ($isPrime) { echo "2^{$n} - 1 是素数"; } else { echo "2^{$n} - 1 不是素数"; }
上の例では、テストのためにべき乗 29 を選択し、戻り値に基づいてメルセンヌ数が素数であるかどうかを判断しました。価値。
要約すると、Lucas-Lehmer 素数性テスト関数の実装を調整し、上記の最適化条件を追加してパフォーマンスを向上させることができます。
結論:
この記事では、PHP および GMP ライブラリを使用して大数の Lucas-Lehmer 素数検定を実装する方法を紹介します。 GMP ライブラリが提供する関数を使用して大量の演算を実行することにより、メルセンヌ数が素数であるかどうかを効果的に判断できます。さらに、この記事では、計算を高速化するためにアルゴリズムのパフォーマンスを最適化するための推奨事項を提供します。この記事がこのテストに興味のある読者の助けになれば幸いです。
以上がPHP と GMP を使用して大数のルーカス・レーマー素数検定を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。