PHP와 GMP를 사용하여 큰 수의 Fermat 소수성 테스트를 구현하는 방법
소개:
Fermat 소수성 테스트는 숫자가 소수인지 확인하는 간단한 방법입니다. 이 방법은 페르마의 작은 정리(Fermat's little theorem)에 기반을 두고 있는데, 이는 만약 p가 소수이고 a가 p보다 작은 양의 정수이면 a^(p-1) ñ 1 (mod p)라는 것입니다. 이 정리를 사용하면 무작위로 선택한 a를 사용하여 숫자가 소수인지 테스트할 수 있습니다. 이 기사에서는 PHP 및 GMP 라이브러리를 사용하여 Fermat 소수성 테스트를 구현합니다.
설치 및 설정:
먼저 시스템에 PHP 및 GMP 라이브러리가 설치되어 있는지 확인하세요. 아직 설치하지 않았다면 명령줄에서 다음 명령을 실행하여 설치할 수 있습니다.
sudo apt-get install php sudo apt-get install php-gmp
다음으로 "fermat_prime.php"라는 파일을 만들고 텍스트 편집기로 엽니다.
Fermat 소수성 테스트 함수 구현:
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; }
코드 분석:
is_prime
함수는 두 개의 매개변수를 허용합니다. $n은 테스트할 숫자, $k는 테스트 횟수입니다.is_prime
接受两个参数,$n是待测试的数,$k是测试的次数gmp_powm
进行幂运算。测试代码:
在代码文件的末尾添加以下代码来测试is_prime
다음으로 함수는 while 루프를 사용하여 $k 테스트를 수행합니다. 각 루프에서 함수는 2와 $n-2 사이의 양의 정수를 무작위로 선택하고 지수화를 위해 GMP 함수 gmp_powm
를 사용합니다.
$k 테스트에서 페르마의 작은 정리 검증을 통과하면 함수는 true를 반환하여 숫자가 소수일 수 있음을 나타냅니다.
코드 테스트: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 ";파일을 저장하고 닫습니다. 코드 실행:
명령줄에서 다음 명령을 실행하여 코드 파일을 실행합니다.
php fermat_prime.php다음으로 명령줄에서 프로그램 출력 결과를 볼 수 있습니다.🎜
17 is probable prime 123456789123456789 is not prime🎜결론:🎜This 이 기사에서는 PHP 및 GMP 라이브러리를 사용하여 큰 수의 Fermat 소수성 테스트를 구현하는 방법을 설명합니다. 이 간단한 테스트를 통해 더 큰 숫자가 소수인지 여부를 알 수 있습니다. 이 방법을 사용하면 Fermat의 Little Theorem을 더 잘 이해할 수 있고 기본적인 소수성 테스트 기능을 구현할 수 있습니다. 🎜
위 내용은 PHP와 GMP를 사용하여 다수의 Fermat 소수성 테스트를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!