철분 원시성 검정

Fermat primality test

Fermat primality test는 숫자가 가능한 prime인지 여부를 결정하기 위한 확률론적 시험이다.

개념

페르마의 작은 정리에는 p가 원시이고 ap에 의해 분할되지 않으면, 그 다음이라고 되어 있다.

만약 p가 프라임인지 테스트하고 싶다면, 우리는 p로 나눌 수 없는 무작위 정수를 고르고 평등이 유지되는지 볼 수 있다. 동일성이 a 에 대해 유지되지 않으면 p는 복합적이다. 만약 p가 복합적인 경우 이 조합은 무작위 a를 지탱할 것 같지 않다.[1] 따라서, 만약 평등이 a의 하나 이상의 가치를 유지한다면, 우리는 p아마도 프라임이라고 말한다.

단, 의 경우 위의 합치는 사소한 것으로 유지된다는 점에 유의하십시오. p가 이상하고 - ) {p이(가 있는 경우에도 사소한 것으로도 보관된다이 때문에 보통 <- 1에서 a를 선택한다

그런 것은 없다.

n이 합성되었을 때 Fermat 거짓말쟁이로 알려져 있다. 이 경우 n은 base a를 위해 Fermat philoprime이라고 불린다.

만약 우리가 그런 것을 선택한다면.

다음에 a는 n의 복합성에 대해 페르마 증인으로 알려져 있다.

n = 221이 프라임인지 여부를 확인하려고 한다고 가정합시다. 임의로 1 < a < 220, say a = 38. 우리는 위의 동등성을 확인하고 그것이 다음을 지탱한다는 것을 발견한다.

221은 프라임이거나 38은 페르마트 거짓말쟁이다. 그래서 24:

그래서 221은 복합적이고 38은 정말로 페르마의 거짓말쟁이였습니다. 게다가 24는 221의 구성성을 가진 페르마의 증인이다.

알고리즘.

알고리즘은 다음과 같이 작성할 수 있다.

입력: n: primality에 대해 테스트할 값, n>3; k: primality에 대해 테스트할 횟수를 결정하는 매개 변수
출력: n이 복합적인 경우 복합적인 경우, 그렇지 않으면 원시적인 경우
k회 반복:
[2, n - 2] 범위에서 랜덤하게 선택
- 1( n) a 1인 경우 합성물을 반환하십시오
합성물이 반환되지 않는 경우: 반환될 경우 primary

a 값 1과 n-1은 모든 n과 모든 홀수 n에 대해 각각 동등하게 유지되는 것으로 사용되지 않으므로 시험에는 아무런 값도 추가되지 않는다.

복잡성

모듈형 지수와 다중 호출 곱셈에 대한 빠른 알고리즘을 사용하여 이 알고리즘의 실행 시간은 O(k logn2 log n) = õ(k logn) = õ(k logn2)이며 여기서 k는 무작위 a를 테스트하는 횟수, n은 원시성을 테스트하고자 하는 값이다. 자세한 내용은 Miller-Rabin primality 테스트를 참조한다.

주어진 기준 a>1에는 무한히 많은 Fermat 가성비가 있다.[1]: Theorem 1 더 나쁜 것은 카마이클 숫자가 무한히 많다는 것이다.[2]은 n {\ 이며, )= 1 }을를) 가진 }의 모든 값이 Fermat liars이다. 이러한 숫자에 대해 Fermat 원시성 시험을 반복적으로 적용하면 요인에 대한 단순한 무작위 검색과 동일하게 수행된다. 카마이클 수치가 프라임 숫자보다 실질적으로 더 희귀하지만(카마이클 숫자에[3] 대한 에르데스의 상한은 프라임 숫자 함수 n/log(n)보다 낮다)[citation needed] 페르마의 원시성 테스트가 위 형식에서 자주 사용되지 않을 정도로 충분히 있다. 대신에, Baillie-와 같은 페르마트 테스트의 다른 더 강력한 확장.PSW, 밀러-라빈, 솔로바이-스트라센이 더 많이 사용된다.

일반적으로 이(가) 카마이클 번호가 아닌 복합 번호일 경우, 적어도 절반 이상이어야 한다.

/ Z) : (,)= 1

페르마 증인이야 를 증명하려면 a}을를) 증인이 되고 2 ..., 을 페르마트 거짓말쟁이가 되게 한다. 그러면

i= ,,.. .. s 대한 페르마트 증인이 된다.

적용들

위에서 언급한 바와 같이 대부분의 애플리케이션은 Miller-Rabin 또는 Baillie-를 사용한다.PSW 검사에서 원시성 검사. 때로는 성능을 향상시키기 위해 페르마트 테스트(소규모 프리타임에 의한 일부 시험 분할과 함께)가 먼저 수행된다. 3.0 버전 이후 GMP는 시험 분할 후 밀러-라빈 테스트를 실행하기 전에 베이스-210 페르마 테스트를 사용한다. Libgcrypt는 Fermat 테스트를 위해 베이스 2와 유사한 프로세스를 사용하지만 OpenSSL은 그렇지 않다.

실제로 GMP와 같은 대부분의 큰 수의 라이브러리에서 페르마트 테스트는 밀러-라빈 테스트보다 눈에 띄게 빠르지 않으며, 많은 입력에서 속도가 느려질 수 있다.[4]

예외적으로 OpenPFGW는 가능한 프라임 테스트에 페르마 테스트만 사용한다. 이 프로그램은 일반적으로 매우 큰 입력을 가진 최대 속도를 목표로 하는 수천 자리 입력과 함께 사용된다. Fermat 테스트에만 의존하는 잘 알려진 또 다른 프로그램은 PGP이다. PGP는 자체 생성된 큰 랜덤 값의 테스트에만 사용된다(개방 소스 상대인 GNU 개인 정보 보호대는 Miller-Rabin 테스트에 이은 Fermat 사전 테스트를 사용한다).

참조

  1. ^ a b Carl Pomerance; John L. Selfridge; Samuel S. Wagstaff, Jr. (July 1980). "The pseudoprimes to 25·109" (PDF). Mathematics of Computation. 35 (151): 1003–1026. doi:10.1090/S0025-5718-1980-0572872-7. JSTOR 2006210.
  2. ^ Alford, W. R.; Granville, Andrew; Pomerance, Carl (1994). "There are Infinitely Many Carmichael Numbers" (PDF). Annals of Mathematics. 140 (3): 703–722. doi:10.2307/2118576. JSTOR 2118576.
  3. ^ Paul Erdős (1956). "On pseudoprimes and Carmichael numbers". Publ. Math. Debrecen. 4: 201–206.
  4. ^ Joe Hurd (2003), Verification of the Miller–Rabin Probabilistic Primality Test, p. 2, CiteSeerX 10.1.1.105.3196