숫자 이론과 암호화에서 Fermat의 정리는 1 차 탐지에 널리 사용됩니다. 기본 아이디어는 : 특정 정수 인 경우 은 소수이며 및 상호 경쟁 정수 , 만족해야합니다 . 이 기능을 바탕으로 빠른 확률 론적 소수 테스트 알고리즘을 구축 할 수 있습니다.
GMP (GNU 다중 정밀 산술 라이브러리)는 대형 정수 처리를 전문으로하는 고성능 다중 예비 수학 계산 라이브러리입니다. PHP에서 GMP 확장을 활성화 한 후 개발자는 제공하는 기능을 사용하여 곱셈, 모듈러스 작업, 임의 번호 생성 등을 포함하여 대형 수술을 효율적으로 수행 할 수 있습니다.
Linux 시스템에서는 다음 명령을 사용하여 GMP 확장을 설치할 수 있습니다.
sudo apt-get install php-gmp
Windows에서는 php.ini 파일의 Extension = php_gmp.dll을 무의미하게하고 서비스를 다시 시작하십시오.
아래는 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가 대규모 수학적 문제를 다루기위한 필수 도구입니다.