Tipperma의 정리는 숫자 이론의 기본 정리 중 하나이며 소수 탐지에서 널리 사용됩니다. 정리는 p가 소수이고 a가 p로 나눌 수없는 정수 인 경우 a^{p-1} \ equiv 1 \ pmod {p} 가 있다고 말합니다. 이 정리는 큰 정수가 소수인지 확인하는 데 사용될 수 있습니다.
PHP 네이티브 함수는 초고속 정수를 처리 할 때 제한 사항이 있기 때문에 GMP 확장은 효율적인 다중 사전 정수 운영 지원을 제공합니다. 먼저 GMP 확장이로드되었는지 확인해야합니다. 예제는 다음과 같습니다.
if (extension_loaded('gmp')) {
echo "GMP확장 라이브러리로드。";
} else {
echo "GMP확장 라이브러리가로드되지 않았습니다。";
exit;
}
함수를 정의하고 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 ( "1000000000000000000000000000003"));</span>
코드에서 문자열은 GMP_INIT를 통해 GMP 큰 정수로 변환 된 다음 테스트 기능을 호출하여 검출을 수행합니다.
위의 단계를 통해 PHP의 GMP 확장 라이브러리와 결합하여 큰 정수에 대한 효과적인 TIPMA 정리 테스트를 구현할 수 있습니다. 이 방법은 간단하고 실용적이며 많은 수의 예비 판단에 적합합니다. 그러나 정확도를 향상시키기 위해 TIP FERMAT 테스트는 일반적으로 다른 프라이머 검출 알고리즘과 함께 사용됩니다.