PHP와 GMP를 사용하여 다수의 Fermat 소수성 테스트를 구현하는 방법

王林
풀어 주다: 2023-07-31 16:54:01
원래의
1294명이 탐색했습니다.

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는 테스트 횟수입니다.
  • 함수는 먼저 $n이 1과 4 사이인지 확인하고, 그렇다면 false를 반환합니다. 1도 4도 소수가 아니기 때문이다. is_prime接受两个参数,$n是待测试的数,$k是测试的次数
  • 函数首先检查$n是否在1和4之间,如果是,则返回false。这是因为1和4都不是素数。
  • 接下来,函数使用一个while循环来进行$k次的测试。在每次循环中,函数随机选择一个介于2和$n-2之间的正整数,并使用GMP函数gmp_powm进行幂运算。
  • 最后,函数比较计算出来的幂是否等于1,如果不相等,则返回false,说明该数不是素数。
  • 如果在$k次测试中都通过了费马小定理的验证,函数返回true,说明该数可能是一个素数。

测试代码:
在代码文件的末尾添加以下代码来测试is_prime다음으로 함수는 while 루프를 사용하여 $k 테스트를 수행합니다. 각 루프에서 함수는 2와 $n-2 사이의 양의 정수를 무작위로 선택하고 지수화를 위해 GMP 함수 gmp_powm를 사용합니다.

마지막으로 함수는 계산된 검정력이 1인지 비교합니다. 그렇지 않으면 false를 반환하여 숫자가 소수가 아님을 나타냅니다.

$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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!