Comment utiliser PHP et GMP pour implémenter le test de primalité de Fermat sur de grands nombres
Introduction :
Le test de primalité de Fermat est une méthode simple pour détecter si un nombre est premier. Cette méthode est basée sur le petit théorème de Fermat, qui stipule que si p est un nombre premier et a est un entier positif inférieur à p, alors a^(p-1) ≡ 1 (mod p). Ce théorème nous permet de tester si un nombre est premier en utilisant un a choisi au hasard. Dans cet article, nous utiliserons les bibliothèques PHP et GMP pour implémenter les tests de primalité Fermat sur de grands nombres.
Installation et configuration :
Tout d'abord, assurez-vous que les bibliothèques PHP et GMP sont installées sur votre système. Si vous ne les avez pas encore installés, vous pouvez les installer en exécutant la commande suivante dans la ligne de commande :
sudo apt-get install php sudo apt-get install php-gmp
Ensuite, créez un fichier appelé "fermat_prime.php" et ouvrez-le avec un éditeur de texte.
Implémentez la fonction de test de primalité Fermat :
Ajoutez le code suivant pour implémenter la fonction de test de primalité Fermat :
<?php function is_prime($n, $k) { if ($n <= 1 || $n == 4) { return false; } if ($n <= 3) { return true; } while ($k > 0) { // 随机选择一个 [2, $n-2] 之间的整数 $a = gmp_random_range(2, $n-2); // 使用 GMP 函数进行幂运算 $res = gmp_powm($a, $n-1, $n); // 如果不满足费马小定理,则 n 不是素数 if (gmp_cmp($res, 1) != 0) { return false; } $k--; } return true; }
Analysez le code :
is_prime
accepte deux paramètres, $n est le nombre à tester, $k est le nombre de testsis_prime
接受两个参数,$n是待测试的数,$k是测试的次数gmp_powm
进行幂运算。测试代码:
在代码文件的末尾添加以下代码来测试is_prime
Ensuite, la fonction utilise une boucle while pour effectuer $k tests. Dans chaque boucle, la fonction sélectionne aléatoirement un entier positif compris entre 2 et $n-2 et utilise la fonction GMP gmp_powm
pour l'exponentiation.
Si la vérification du petit théorème de Fermat est réussie dans les tests $k, la fonction renvoie vrai, indiquant que le nombre peut être un nombre premier.
Testez le code :Ajoutez le code suivant à la fin du fichier de code pour tester l'effet de la fonction is_prime
:
// 测试1: 检测一个较小的素数 $n = gmp_init("17"); $k = 5; $result = is_prime($n, $k); echo $result ? "$n is probable prime " : "$n is not prime "; // 测试2: 检测一个较大的合数 $n = gmp_init("123456789123456789"); $k = 5; $result = is_prime($n, $k); echo $result ? "$n is probable prime " : "$n is not prime ";
Exécutez la commande suivante dans la ligne de commande pour exécuter le fichier de code :
php fermat_prime.php
17 is probable prime 123456789123456789 is not prime
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!