数の理論と暗号化では、ファーマットの定理は一次検出に広く使用されています。基本的なアイデアは、特定の整数の場合です は素数であり、その後 および相互に競合する整数 、満足する必要があります 。この機能に基づいて、高速な確率的プライムナンバーテストアルゴリズムを構築できます。
GMP(GNU多重精密算術ライブラリ)は、大規模な整数の処理を専門とする高性能マルチエシジョン数学計算ライブラリです。 PHPでGMP拡張機能を有効にした後、開発者は提供する機能を使用して、乗算、弾性操作、乱数生成などを含む大規模な操作を効率的に実行できます。
Linuxシステムでは、次のコマンドを使用してGMP拡張機能をインストールできます。
sudo apt-get install php-gmp
Windowsでは、 PHP.iniファイルの拡張機能= php_gmp.dllを除外して、サービスを再起動します。
以下は、PHPとGMPに基づくFERMATテスト関数です。これは、特定の多数がプライム番号であるかどうかの可能性を判断するために使用されます。
関数fermattest($ n、$ k){ if($ n == 2){ trueを戻るします。 // 2は素数です} if($ n <2 || $ n%2 == 0){ falseを戻るします。 //平と2未満の番号は素数であることはできません} for($ i = 0; $ i <$ k; $ i ++){ $ a = gmp_random_range(2、$ n -2); //範囲で乱数を生成する$ r = gmp_powm($ a、$ n -1、$ n); // a^(n-1)mod nを計算しますします if(gmp_cmp($ r、1)!= 0){ falseを戻るします。 // Fermat定理条件は満たされていません} } trueを戻るします。 //複数のテストを満たす、プライムである可能性があります}
この関数では、パラメーター$ nは判断する必要がある大型整数であり、 $ kはランダムな数のテストです。結果の精度が高くなるほど。
次のコードを使用して、関数の実際の効果をテストできます。
$ n = gmp_init( "1234567890987654321"); //テスト番号を指定します$ k = 10; // 10のテストを実行します$ result = fermattest($ n、$ k); if($ result){ エコー「多分プライム」。 } それ以外 { エコー「いいえプライム」; }
上記の例では、テストのためにより大きな数を選択しました。 Fermatテストの性質に応じて、複数のテストが条件を満たしている場合、数は「おそらくプライム」と見なすことができます。
PHPによって統合されたGMP拡張を通じて、開発者はFermatの定理の主要な検出アルゴリズムを迅速に実装できます。この方法は、キー生成、暗号化システムの大規模なスクリーニングなど、大規模な数のプロパティの効率的な検証を必要とするアプリケーションシナリオに非常に適しています。
GMP拡張の能力はそれ以上です。 FERMATテストに加えて、追加、減算、乗算、分割、モジュラス、および大型整数のビット操作など、さまざまな数学的操作もサポートしています。これは、PHPが大規模な数学的問題に対処するための不可欠なツールです。