현재 위치: > 최신 기사 목록> Fermat 정리 테스트에는 PHP 및 GMP를 사용하는 방법

Fermat 정리 테스트에는 PHP 및 GMP를 사용하는 방법

M66 2025-06-07

Ferma의 정리 및 품질 테스트 소개

숫자 이론과 암호화에서 Fermat의 정리는 1 차 탐지에 널리 사용됩니다. 기본 아이디어는 : 특정 정수 인 경우 n n 은 소수이며 n n 및 상호 경쟁 정수 a a , 만족해야합니다 a n ? 1 1 m o d ? ? n a^{n-1} \equiv 1 \mod n . 이 기능을 바탕으로 빠른 확률 론적 소수 테스트 알고리즘을 구축 할 수 있습니다.

GMP 확장 소개

GMP (GNU 다중 정밀 산술 라이브러리)는 대형 정수 처리를 전문으로하는 고성능 다중 예비 수학 계산 라이브러리입니다. PHP에서 GMP 확장을 활성화 한 후 개발자는 제공하는 기능을 사용하여 곱셈, 모듈러스 작업, 임의 번호 생성 등을 포함하여 대형 수술을 효율적으로 수행 할 수 있습니다.

Linux 시스템에서는 다음 명령을 사용하여 GMP 확장을 설치할 수 있습니다.

 sudo apt-get install php-gmp

Windows에서는 php.ini 파일의 Extension = php_gmp.dll을 무의미하게하고 서비스를 다시 시작하십시오.

Ferma의 정리 테스트 기능 구현

아래는 PHP 및 GMP를 기반으로 한 Fermat 테스트 기능으로, 주어진 많은 수가 소수인지 여부를 결정하는 데 사용됩니다.

기능 fermattest ($ n, $ k) {
    if ($ n == 2) {
        진실을 반환하십시오. // 2는 소수입니다}
    if ($ n <2 || $ n % 2 == 0) {
        거짓을 반환합니다. // 균일하고 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) {
            거짓을 반환합니다. // Fermat 정리 조건이 충족되지 않습니다}
    }
    진실을 반환하십시오. // 여러 테스트를 충족하면 프라임이 될 수 있습니다}

이 기능에서 매개 변수 $ n은 판단 해야하는 큰 정수이며 $ k는 임의의 테스트입니다. 결과의 정확도가 높아집니다.

테스트 예 : 많은 숫자를 확인하십시오

다음 코드를 통해 기능의 실제 효과를 테스트 할 수 있습니다.

$ n = gmp_init ( "1234567890987654321"); // 테스트 번호를 지정하여 $ k = 10; // 10 개의 테스트 수행 $ result = fermattest ($ n, $ k);

if ($ result) {
    에코 "아마도 프라임";
} 또 다른 {
    에코 "비 프라임";
}

위의 예에서는 테스트를 위해 더 많은 수를 선택했습니다. Fermat 테스트의 특성에 따라 여러 테스트가 조건을 충족하면 숫자는 "아마도 프라임"으로 간주 될 수 있습니다.

요약 및 응용 시나리오

PHP가 통합 한 GMP 확장을 통해 개발자는 Fermat의 정리의 1 차 탐지 알고리즘을 빠르게 구현할 수 있습니다. 이 방법은 주요 생성, 암호화 시스템의 대형 수준 스크리닝 등의 대형 수치를 효율적으로 검증 해야하는 응용 프로그램 시나리오에 매우 적합합니다.

GMP 확장 능력은 그 이상입니다. Fermat 테스트 외에도 첨가, 뺄셈, 곱셈, 분할, 모듈러스 및 큰 정수의 비트 작업을 포함한 다양한 수학 작업을 지원합니다. PHP가 대규모 수학적 문제를 다루기위한 필수 도구입니다.