Wann ist der AKS-Primalitätstest tatsächlich schneller als andere Tests?


24

Ich versuche eine Vorstellung davon zu bekommen, wie der AKS-Primalitätstest interpretiert werden sollte, wenn ich etwas darüber erfahre, z. B. eine Folgerung zum Nachweis von PRIMES ⊆ P oder einen tatsächlich praktischen Algorithmus für den Primalitätstest auf Computern.

Der Test hat eine polynomielle Laufzeit, jedoch mit hohem Grad und möglichen hohen Konstanten. Also, in der Praxis, bei welchem übertrifft es andere Primalitätstests? Hierbei ist die Anzahl der Ziffern der Primzahl, und "Überschreiten" bezieht sich auf die ungefähre Laufzeit der Tests auf typischen Computerarchitekturen.nnn

Ich interessiere mich für funktional vergleichbare Algorithmen, dh deterministische, die keine Vermutungen zur Korrektheit benötigen.

Ist es angesichts der Speicheranforderungen des Tests außerdem sinnvoll, einen solchen Test vor den anderen zu verwenden?

Antworten:


23

Schnelle Antwort: Niemals aus praktischen Gründen. Es ist derzeit nicht von praktischem Nutzen.

Gemessene Primalitätszeiten

Lassen Sie uns zunächst "praktische" Zusammensetzungsprüfungen von Primalitätsnachweisen trennen. Ersteres ist für fast alle Zwecke gut genug, obwohl es verschiedene Teststufen gibt, die die Menschen für angemessen halten. Für Zahlen unter 2 ^ 64 sind nicht mehr als 7 Miller-Rabin-Tests oder ein BPSW-Test für eine deterministische Antwort erforderlich. Dies ist wesentlich schneller als AKS und in jedem Fall genauso korrekt. Für Zahlen über 2 ^ 64 ist BPSW eine gute Wahl, da einige zusätzliche Miller-Rabin-Tests auf der Basis von Zufallszahlen zu sehr geringen Kosten zusätzliches Vertrauen schaffen. Fast alle Beweismethoden beginnen (oder sollten) mit einem Test wie diesem, weil er billig ist und bedeutet, dass wir nur an Zahlen arbeiten, die mit ziemlicher Sicherheit Primzahlen sind.

Weiter zu den Beweisen. In jedem Fall erfordert der resultierende Beweis keine Vermutungen, so dass diese funktional verglichen werden können. Das "gotcha" von APR-CL ist, dass es nicht ganz polynomial ist, und das "gotcha" von ECPP / fastECPP ist, dass es Zahlen geben kann, die länger als erwartet dauern.

In der Grafik sehen wir zwei Open-Source-AKS-Implementierungen - die erste stammt aus dem v6-Papier, die zweite enthält Verbesserungen von Bernstein und Voloch und eine nette R / S-Heuristik von Bornemann. Diese verwenden eine binäre Segmentierung in GMP für die Polynom-Multiplikationen, sind also ziemlich effizient, und die Speichernutzung ist für die hier betrachteten Größen kein Problem. Sie erzeugen schöne gerade Linien mit einer Steigung von ~ 6,4 im Log-Log-Graphen, was großartig ist. Die Extrapolation auf 1000 Stellen erfolgt jedoch zu geschätzten Zeiten im Bereich von Hunderttausenden bis Millionen von Jahren, verglichen mit einigen Minuten für APR-CL und ECPP. Es gibt weitere Optimierungen, die aus dem Bernstein-Papier von 2002 vorgenommen werden könnten, aber ich denke nicht, dass dies die Situation wesentlich verändern wird (obwohl dies bis zur Implementierung nicht bewiesen ist).

Schließlich schlägt AKS die Trial Division. Das BLS75-Theorem-5-Verfahren (z. B. n-1-Beweis) erfordert eine partielle Faktorisierung von n-1. Dies funktioniert gut bei kleinen Größen, und auch wenn wir Glück haben und n-1 leicht zu faktorisieren ist, werden wir irgendwann nicht mehr mit großen Semi-Primzahlen rechnen müssen. Es gibt effizientere Implementierungen, aber es skaliert wirklich nicht über 100 Stellen hinaus. Wir können sehen, dass AKS diese Methode bestehen wird. Wenn Sie die Frage also 1975 stellten (und damals den AKS-Algorithmus hatten), könnten wir die Frequenzweiche berechnen, für die AKS der praktischste Algorithmus war. In den späten 1980er Jahren war APR-CL und andere zyklotomische Methoden der richtige Vergleich, und Mitte der 1990er Jahre mussten wir ECPP einbeziehen.

Die Methoden APR-CL und ECPP sind beide Open-Source-Implementierungen. Primo (kostenloses, aber nicht Open Source-ECPP) ist schneller für größere Ziffern und ich bin sicher, dass es eine schönere Kurve gibt (ich habe noch kein neues Benchmarking durchgeführt). APR-CL ist nicht polynomial, aber der Exponent hat einen Faktor der, wie jemand witzelte, "unendlich wird, dies aber nie beobachtet wurde". Dies lässt uns glauben, dass sich die Linien theoretisch für keinen Wert von n kreuzen würden, bei dem AKS enden würde, bevor unsere Sonne ausgebrannt wäre. ECPP ist ein Las Vegas-Algorithmus. Wenn wir eine Antwort erhalten, die zu 100% korrekt ist, erwarten wir ein Ergebnis in vermutetem (ECPP) oderLogLogLognO(Log5+ϵ(n))O(Log4+ϵ(n))("fastECPP"), aber es kann Zahlen geben, die länger dauern. Wir gehen daher davon aus, dass Standard-AKS bei fast allen Zahlen immer langsamer als ECPP sein wird (dies hat sich bei Zahlen mit bis zu 25.000 Stellen durchaus bewährt).

AKS kann weitere Verbesserungen aufweisen, die darauf warten, entdeckt zu werden, wodurch es praktisch wird. In Bernsteins Quartic-Arbeit wird ein AKS-basierter randomisierter -Algorithmus erörtert, und in Morains fastECPP-Arbeit werden andere nicht deterministische AKS-basierte Methoden beschrieben. Dies ist eine grundlegende Änderung, zeigt aber, wie AKS einige neue Forschungsbereiche erschlossen hat. Fast 10 Jahre später habe ich jedoch noch niemanden gesehen, der diese Methode (oder sogar Implementierungen) verwendet. Er schreibt in der Einleitung: "Ist die Zeit für den neuen Algorithmus kleiner als die Zeit , um elliptisch zu finden? Kurve Zertifikate? Mein aktueller Eindruck ist, dass die Antwort nein ist, aber dass weitere [...] Ergebnisse die Antwort ändern könnten. "O(Log4+ϵ(n))(lgn)4+O(1)(lgn)4+O(1)

Einige dieser Algorithmen können problemlos parallelisiert oder verteilt werden. AKS sehr einfach (jeder Test ist unabhängig). ECPP ist nicht zu schwer. Bei APR-CL bin ich mir nicht sicher.

ECPP und die BLS75-Methoden erzeugen Zertifikate, die unabhängig und schnell verifiziert werden können. Dies ist ein enormer Vorteil gegenüber AKS und APR-CL, bei denen wir nur der Implementierung und dem Computer vertrauen müssen, von denen sie erstellt wurden.


18

O~(Log6n)O~(Log4n)O~(n1/7)O(LognO(LogLogLogn))

O~(Log2n)2-80O~(Log2n)

Bei all diesen Tests spielt der Speicher keine Rolle.


In ihrem Kommentar wirft jbapple die Frage auf, welcher Primalitätstest in der Praxis verwendet werden soll. Dies ist eine Frage der Implementierung und des Benchmarks: Implementieren und optimieren Sie einige Algorithmen und bestimmen Sie experimentell, welche in welchem ​​Bereich am schnellsten sind. Für die Neugierigen haben die Programmierer von PARI genau das getan, und sie haben eine deterministische Funktion isprimeund eine probabilistische Funktion entwickelt ispseudoprime, die beide hier zu finden sind . Der verwendete Wahrscheinlichkeitstest ist Miller-Rabin. Der deterministische ist BPSW.


Hier finden Sie weitere Informationen von Dana Jacobsen :

Pari verwendet seit Version 2.3 einen APR-CL Primality Proof für isprime(x)und einen BPSW Probable Prime Test (mit "fast extra starkem" Lucas Test) für ispseudoprime(x).

Sie nehmen Argumente an, die das Verhalten ändern:

  • isprime(x,0) (Standardeinstellung.) Verwendet eine Kombination (BPSW, schneller Satz von Pocklington oder BLS75 5, APR-CL).
  • isprime(x,1)n-1
  • isprime(x,2) Verwendet APR-CL.

  • ispseudoprime(x,0) (Standardeinstellung.) Verwendet BPSW (MR mit Basis 2, "fast extra stark" Lucas).

  • ispseudoprime(x,k)k1kmpz_is_probab_prime_p(x,k)

In Pari 2.1.7 wurde ein viel schlechteres Setup verwendet. isprime(x)war nur MR-Tests (Standard 10), die zu lustigen Dingen wie isprime(9)ziemlich oft wahr zurückkehren führten . Die Verwendung von isprime(x,1)würde einen Pocklington-Proof ergeben, der für etwa 80 Stellen in Ordnung war und dann zu langsam wurde, um allgemein nützlich zu sein.

Sie schreiben auch In der Realität verwendet niemand diese Algorithmen, da sie zu langsam sind. Ich glaube, ich weiß, was du meinst, aber ich denke, das ist zu stark, abhängig von deinem Publikum. AKS ist natürlich erstaunlich langsam, aber APR-CL und ECPP sind schnell genug, dass manche Leute sie benutzen. Sie sind nützlich für paranoide Krypto und nützlich für Leute, die Dinge tun wie primegapsoder factordbwo man genug Zeit hat, um nachgewiesene Primzahlen zu wollen.

[Mein Kommentar dazu: Wenn wir nach einer Primzahl in einem bestimmten Bereich suchen, verwenden wir einen Siebansatz, gefolgt von relativ schnellen Wahrscheinlichkeitstests. Nur dann führen wir, wenn überhaupt, einen deterministischen Test durch.]

Bei all diesen Tests spielt der Speicher keine Rolle. Es ist ein Problem für AKS. Siehe zum Beispiel diesen eprint . Ein Teil davon hängt von der Implementierung ab. Wenn man implementiert, was das Video von numberphile AKS nennt (was eigentlich eine Verallgemeinerung von Fermats Little Theorem ist), wird die Speichernutzung extrem hoch sein. Die Verwendung einer NTL-Implementierung des v1- oder v6-Algorithmus wie in dem genannten Artikel führt zu einer dummen Speichermenge. Bei einer guten GMP-Implementierung für Version 6 werden immer noch ~ 2 GB für eine 1024-Bit-Primzahl benötigt, was sehr viel istSpeicher für eine so kleine Anzahl. Die Verwendung einiger Bernstein-Verbesserungen und der GMP-Binärsegmentierung führt zu einem viel besseren Wachstum (z. B. ~ 120 MB für 1024-Bit). Dies ist immer noch viel größer als andere Methoden, und es ist keine Überraschung, dass es millionenfach langsamer ist als APR-CL oder ECPP.


2
Ich glaube nicht, dass dies die gestellte Frage beantwortet, für die die Konstanten dieser Tests berechnet werden müssten.
Jbapple

1
Verwenden Sie Ihre Abstimmungen immer dann, wenn Sie auf einen ungeheuer schlampigen, mühelosen Beitrag oder eine Antwort stoßen, die eindeutig und möglicherweise gefährlich falsch ist. - Ich kann nicht sehen, wie die Person, die diese Antwort abstimmt, die Abstimmung rechtfertigt.
Pål GD

2
n

nLogn

Guter Beitrag, aber Ihre Definition von "niemandem" ist noch so wenig anders. Aus Neugier testete ich, wie lange es dauert, eine mit OpenSSL erzeugte wahrscheinliche DSA-Primzahl von 2048 Bit (mit openssl pkeyparam -textder Hex-Zeichenfolge extrahiert wird) mit PARIs isprime(APR-CL wie angegeben) zu überprüfen : ca. 80s auf einem schnellen Notebook. Als Referenz benötigt Chromium etwas mehr als 0,25 Sekunden für jede Iteration meiner JavaScript-Demo-Implementierung des Frobenius-Tests (der viel stärker als MR ist), sodass APR-CL sicherlich paranoid, aber machbar ist.
Arne Vogel

2

O(f(n))O(f(n))O(G(n))nnn

Als ich dieses kürzlich erschienene Papier über arxiv sah, das dieses Thema eingehend / detailliert analysiert, nicht sicher ist, was die Leute darüber denken, habe ich bisher keine Reaktionen gehört, es scheint eine von Studenten erstellte These zu sein, aber möglicherweise eine der detailliertesten / umfassendsten Analysen von praktische Anwendung des Algorithmus zur Verfügung.


AKS ist effizienter als was? Was ist der Wettbewerb?
Yuval Filmus

alle anderen Algorithmen. hauptsächlich wahrscheinlichkeitstheoretisch? Details in der Zeitung
vzn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.