Tippermaの定理は、数の理論の基本定理の1つであり、素数検出で広く使用されています。定理は、pが素数であり、aがpによって分割されない整数である場合、 a^{p-1} \ equiv 1 \ pmod {p}があると述べています。この定理を使用して、大きな整数が素数であるかどうかを確認できます。
PHPネイティブ機能には、超大型整数を扱う際に制限があるため、GMP拡張機能は効率的なマルチプレシジョン整数操作サポートを提供します。まず、GMP拡張がロードされていることを確認する必要があります。例は次のとおりです。
if (extension_loaded('gmp')) {
echo "GMP拡張ライブラリがロードされました。";
} else {
echo "GMP拡張ライブラリはロードされていません。";
exit;
}
関数を定義することにより、GMPのマルチプレシジョン操作関数を使用して、ランダムテストの複数ラウンドを実行すると、大整数の主要な特性を判断できます。
function fermatTest($n, $k) {
for ($i = 0; $i < $k; $i++) {
$a = gmp_random_range(2, $n - 1); // ランダムに整数を選択しますa
$result = gmp_powm($a, $n - 1, $n); // 計算します a^(n-1) mod n
if (gmp_cmp($result, 1) !== 0) { // 結果はそうではありません1,n非素数
return false;
}
}
return true; // すべてのテストに合格します,nおそらくプライム
}
TEFAMAテスト関数の精度を検証するために、ヘルパーテスト関数を定義し、上記の方法を呼び出して複数回検証できます。
function testFermatTest($n) {
if (fermatTest($n, 10)) { // 行為10ヒントテスト
echo "{$n} おそらくプライム。";
} else {
echo "{$n} 素数ではありません。";
}
}
次の例は、超大規模な整数でTipma定理品質テストを実行する方法を示しています。
<span class="fun">testfermattest(gmp_init( "100000000000000000000000000003"));</span>
コードでは、文字列はGMP_INITを介してGMPの大整数に変換され、テスト関数が呼び出され、検出が実行されます。
上記の手順を通じて、PHPのGMP拡張ライブラリと組み合わせて、大規模な整数に対して効果的なTipma定理テストを実装できます。この方法はシンプルで実用的であり、多数の予備的な判断に適しています。ただし、精度を向上させるために、TIP Fermatテストは通常、他のプライマー検出アルゴリズムと組み合わせて使用されます。