現在の位置: ホーム> 最新記事一覧> PHPおよびGMP拡張を使用した大規模な整数Tipma定理のパフォーマンステスト方法の実装

PHPおよびGMP拡張を使用した大規模な整数Tipma定理のパフォーマンステスト方法の実装

M66 2025-08-08

Tipperma定理の紹介

Tippermaの定理は、数の理論の基本定理の1つであり、素数検出で広く使用されています。定理は、pが素数であり、aがpによって分割されない整数である場合、 a^{p-1} \ equiv 1 \ pmod {p}があると述べています。この定理を使用して、大きな整数が素数であるかどうかを確認できます。

GMP拡張機能を導入して、大規模な整数を処理します

PHPネイティブ機能には、超大型整数を扱う際に制限があるため、GMP拡張機能は効率的なマルチプレシジョン整数操作サポートを提供します。まず、GMP拡張がロードされていることを確認する必要があります。例は次のとおりです。

 if (extension_loaded('gmp')) {
    echo "GMP拡張ライブラリがロードされました。";
} else {
    echo "GMP拡張ライブラリはロードされていません。";
    exit;
}

TIPSMA定理テスト関数の実装

関数を定義することにより、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テストは通常、他のプライマー検出アルゴリズムと組み合わせて使用されます。