AKS 우선 순위 테스트는 실제로 다른 테스트보다 빠릅니다.


24

PRIMES ⊆ P를 증명하기위한 목록이나 컴퓨터에서 실질적인 우선 순위 테스트를위한 실질적인 알고리즘과 같이 AKS 우선 순위 테스트 를 이해하는 방법에 대한 아이디어를 얻으려고 합니다.

테스트에는 다항식 런타임이 있지만 높은 수준과 가능한 높은 상수가 있습니다. 따라서, 프리 액티브에서 다른 원시성 테스트를 능가 하는 은 무엇입니까? 여기서 은 소수의 자릿수이며 "surpass"는 일반적인 컴퓨터 아키텍처에서 테스트의 대략적인 런타임을 나타냅니다.

기능적으로 비교 가능한 알고리즘, 즉 정확성을 위해 추측 할 필요가없는 결정론적인 알고리즘에 관심이 있습니다.

또한 테스트의 메모리 요구 사항에 따라 다른 테스트보다 이러한 테스트를 사용하고 있습니까?

답변:


23

빠른 답변 : 실제적인 목적으로는 절대 사용하지 마십시오. 현재 실용적이지 않습니다.

측정 된 우선 순위 시간

먼저, "실제적인"복합성 테스트를 우선 성 증명과 분리 해 봅시다. 전자는 사람들이 적절하다고 생각하는 다른 수준의 테스트가 있지만 거의 모든 목적에 충분합니다. 2 ^ 64 미만의 숫자의 경우 결정 론적 답변을 위해 7 개 이하의 Miller-Rabin 검정 또는 하나의 BPSW 검정이 필요합니다. 이것은 AKS보다 훨씬 빠르며 모든 경우에 똑같이 정확합니다. 2 ^ 64를 초과하는 숫자의 경우 BPSW를 선택하는 것이 좋습니다. 일부 추가 임의 기수 Miller-Rabin 테스트는 약간의 비용으로 약간의 자신감을 더합니다. 거의 모든 증명 방법은 값이 싸기 때문에 이와 같은 테스트로 시작합니다 (또는 그 방법으로 시작해야 함). 우리는 거의 확실하게 소수 인 숫자에 대해서만 열심히 노력합니다.

증거로 넘어갑니다. 각각의 경우 결과 증거는 추측이 필요하지 않으므로 기능적으로 비교할 수 있습니다. APR-CL의 "gotcha"는 다항식이 아니며 ECPP / fastECPP의 "gotcha"는 예상보다 오래 걸리는 숫자가있을 수 있다는 것입니다.

그래프에서 우리는 두 가지 오픈 소스 AKS 구현을 볼 수 있습니다. 첫 번째는 v6 논문에서, 두 번째는 Bernstein과 Voloch에서 개선되었으며 Bornemann의 우수한 r / s 휴리스틱을 포함합니다. 이것들은 다항식 곱셈을 위해 GMP에서 이진 분할을 사용하므로 매우 효율적이며 메모리 사용은 여기에서 고려 된 크기에 중요하지 않습니다. 로그 로그 그래프에서 ~ 6.4의 기울기로 멋진 직선을 생성합니다. 그러나 APR-CL 및 ECPP의 경우 몇 분이 걸리는 것과 비교하여 1000 자리까지 추정하면 수십만에서 수백만 년으로 추정 된 시간에 도달합니다. 2002 번스타인 (Bernstein) 논문에서 수행 할 수있는 추가 최적화가 있지만, 이것이 실제로 상황을 바꿀 것이라고는 생각하지 않습니다 (구현 될 때까지는 입증되지 않음).

결국 AKS는 시험 부문을 능가합니다. BLS75 정리 5 (예 : n-1 증명) 방법에는 n-1의 부분 인수 분해가 필요합니다. 이것은 작은 크기에서 잘 작동하며 운이 좋고 n-1이 팩토링하기 쉬운 경우에도 결국 큰 세미 프라임을 고려해야합니다. 보다 효율적인 구현이 있지만 실제로 100 자리를 초과하여 확장되지는 않습니다. AKS가이 방법을 통과한다는 것을 알 수 있습니다. 1975 년에 질문을했고 (그리고 당시 AKS 알고리즘을 가졌다면) AKS가 가장 실용적인 알고리즘 인 크로스 오버를 계산할 수있었습니다. 그러나 1980 년대 후반에는 APR-CL과 다른 사이클로 톰 방법이 올바른 비교였으며 1990 년대 중반에는 ECPP를 포함시켜야했습니다.

APR-CL 및 ECPP 방법은 모두 오픈 소스 구현입니다. Primo (무료이지만 오픈 소스 ECPP는 아님)는 더 큰 숫자 크기에 대해 더 빠를 것이고 더 좋은 곡선을 가질 것이라고 확신합니다 (아직 새로운 벤치마킹을하지 않았습니다). APR-CL은 다항식이 아니지만 지수에는 인자가 있습니다.이 인자 는 누군가가 "무한대로 갔지만 결코 그렇게 관찰 된 적이 없습니다". 이것은 이론상으로 선이 타기 전에 AKS가 끝나는 n 값에 대해 선이 교차하지 않는다고 믿게합니다. ECPP는 라스 베이거스 알고리즘으로, 100 % 정확한 답변을 얻으면 추측 된 (ECPP) 또는로그로그로그영형(로그5+ϵ())영형(로그4+ϵ())( "fastECPP") 시간이지만 더 오래 걸리는 숫자가있을 수 있습니다. 따라서 우리는 표준 AKS가 거의 모든 숫자에 대해 ECPP보다 항상 느릴 것으로 예상합니다 (확실히 25k 자릿수의 숫자에는 그 자체가 표시되었습니다).

AKS는 실용적으로 발견 될 때까지 더 많은 개선이있을 수 있습니다. Bernstein의 Quartic 논문은 AKS 기반 무작위 알고리즘에 대해 설명하고 Morain의 fastECPP 논문은 다른 비 결정적 AKS 기반 방법을 참조합니다. 이것은 근본적인 변화이지만 AKS가 새로운 연구 영역을 어떻게 열 었는지 보여줍니다. 그러나 거의 10 년 후 나는 아무도이 방법 (또는 구현)을 사용하는 것을 보지 못했습니다. 그는인가 ", 도입에 기록하는 보다 작은 새로운 알고리즘 시간 elliptic- 찾을 시간 곡선 증명서? 나의 현재 인상은 대답은 '아니오'이지만, 그 결과는 [...] 대답이 바뀔 수 있다는 것입니다. "영형(로그4+ϵ())(lg)4+영형(1)(lg)4+영형(1)

이러한 알고리즘 중 일부는 쉽게 병렬화 또는 분산 될 수 있습니다. 매우 쉽게 AKS (각 's'테스트는 독립적 임). ECPP는 그렇게 어렵지 않습니다. APR-CL에 대해 잘 모르겠습니다.

ECPP 및 BLS75 방법은 독립적이고 신속하게 확인할 수있는 인증서를 생성합니다. 이는 AKS 및 APR-CL에 비해 큰 이점입니다. 여기서 구현 및 컴퓨터를 신뢰하면됩니다.


18

영형~(로그6)영형~(로그4)영형~(1/7)영형(로그영형(로그로그로그))

영형~(로그2)280영형~(로그2)

이러한 모든 테스트에서 메모리는 문제가되지 않습니다.


jbapple은 자신의 의견에서 실제로 사용할 우선 순위 테스트를 결정하는 문제를 제기합니다. 이는 구현 및 벤치마킹의 문제입니다. 몇 가지 알고리즘을 구현 및 최적화하고 실험적으로 어느 범위에서 가장 빠른지를 결정하십시오. 궁금한 점은 PARI의 코더가 그 일을했으며 결정적 기능 isprime과 확률 적 기능을 ispseudoprime발견 했습니다 . 사용 된 확률 테스트는 Miller–Rabin입니다. 결정론적인 것은 BPSW입니다.


다음은 Dana Jacobsen의 추가 정보입니다 .

버전 2.3 이후 Pari는에 대해 APR-CL isprime(x)프리미티브 증명을 사용 하고 BPSW 가능한 프라임 테스트 ( "거의 추가 강한"루카스 테스트 사용)를 사용 ispseudoprime(x)합니다.

그들은 행동을 변화시키는 논쟁을합니다 :

  • isprime(x,0) (기본값) 조합을 사용합니다 (BPSW, 빠른 Pocklington 또는 BLS75 정리 5, APR-CL).
  • isprime(x,1)1
  • isprime(x,2) APR-CL을 사용합니다.

  • ispseudoprime(x,0) (기본값) BPSW를 사용합니다 (베이스 2가있는 MR, "거의 매우 강함"Lucas).

  • ispseudoprime(x,k)케이1케이mpz_is_probab_prime_p(x,k)

Pari 2.1.7은 훨씬 더 나쁜 설정을 사용했습니다. isprime(x)MR 테스트 (기본 10) 였기 isprime(9)때문에 사실을 자주 반환하는 것과 같은 재미있는 일이있었습니다 . isprime(x,1)Pocklington 증명을 사용하면 약 80 자리가 좋았고 너무 느려서 일반적으로 유용하지 않습니다.

또한 쓰기 가 너무 느린 때문에 아무도, 이러한 알고리즘을 사용하지 않고, 실제로. 나는 당신이 무슨 뜻인지 알지만, 관객에 따라 너무 강하다고 생각합니다. 물론 AKS는 엄청나게 느리지 만 APR-CL 및 ECPP는 일부 사람들이 사용하기에 충분히 빠릅니다. 그것들은 편집증 암호에 유용하며, 입증 된 프라임을 원할만큼 충분한 시간이 primegaps있거나 같은 factordb장소에서 일하는 사람들에게 유용합니다 .

[그것에 대한 나의 의견 : 특정 범위에서 소수를 찾을 때, 우리는 몇 가지 체질 방식을 사용하고 비교적 빠른 확률 테스트를 사용합니다. 그래야만 결정 론적 테스트를 실행할 수 있습니다.]

이러한 모든 테스트에서 메모리는 문제가되지 않습니다. AKS의 문제입니다. 예를 들어이 eprint 를 참조하십시오 . 이 중 일부는 구현에 따라 다릅니다. numberphile의 비디오가 AKS (실제로 Fermat의 Little Theorem의 일반화)를 호출하는 것을 구현하면 메모리 사용이 매우 높아집니다. 참조 용지와 같은 v1 또는 v6 알고리즘의 NTL 구현을 사용하면 어리석은 많은 양의 메모리가 생성됩니다. 좋은 버전 6 GMP 구현은 여전히 인 1024 비트 소수를위한 ~ 2 기가 바이트 사용 이 많이그런 적은 수의 메모리. Bernstein 개선 사항과 GMP 이진 분할을 사용하면 훨씬 더 나은 성장으로 이어집니다 (예 : 1024 비트의 경우 ~ 120MB). 이것은 여전히 ​​다른 방법에 필요한 것보다 훨씬 크며 APR-CL 또는 ECPP보다 수백만 배 느릴 것입니다.


2
나는 이것이 제기 된 질문에 대답하지 않는다고 생각하는데,이 테스트의 상수를 계산해야합니다.
jbapple

1
엄청나게 조잡하고 노력이 많이 들지 않는 게시물이나 명확하고 위험 할 수있는 답변이있을 때마다 다운 보트를 사용하십시오. —이 답변을 내리는 사람이 투표를 정당화하는 방법을 알 수 없습니다.
Pål GD

2

로그

좋은 글이지만 "아무도 아닌 것"에 대한 당신의 정의는 아주 약간 벗어납니다. 호기심으로, openssl pkeyparam -textPARI isprime(APR-CL )를 사용 하여 OpenSSL로 생성 된 2048 비트 DSA 가능한 소수 ( 16 진수 문자열을 추출하는 데 사용)를 확인하는 데 걸리는 시간 은 빠른 노트북에서 약 80 초입니다. 참고로 Chromium은 Frobenius 테스트 (MR보다 훨씬 강함) 의 JavaScript 데모 구현을 반복 할 때마다 0.25s가 약간 넘게 필요 하므로 APR-CL은 확실히 편집증이지만 실행 가능합니다.
Arne Vogel

2

영형(에프())영형(에프())영형(())

arxiv에 대한 최근 논문을 보았습니다.이 주제를 깊이 / 세부적으로 분석하고 사람들이 어떻게 생각하는지 확실하지 않으며 지금까지 반응을 듣지 못했을 수도 있습니다. 아마도 학생이 작성한 논문 일 수도 있지만 아마도 가장 상세하고 포괄적 인 분석 중 하나 일 것입니다 사용 가능한 알고리즘의 실제 사용.


AKS가 무엇보다 효율적입니까? 경쟁은 무엇입니까?
Yuval Filmus

다른 모든 알고리즘. 주로 probabilistc? 논문의 상세
vzn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.