AKS-Primzahltest

Der AKS-Primzahltest (auch bekannt unter dem Namen Agrawal-Kayal-Saxena-Primzahltest) ist ein deterministischer Algorithmus, der für eine natürliche Zahl in polynomieller Laufzeit feststellt, ob sie prim ist oder nicht. Er wurde von den drei indischen Wissenschaftlern Manindra Agrawal, Neeraj Kayal und Nitin Saxena entwickelt und 2002 in einer Abhandlung mit dem Titel PRIMES is in P (deutsch sinngemäß: Das Primzahl-Problem gehört zur Komplexitätsklasse P) veröffentlicht. Für ihre Arbeit wurden die Forscher 2006 mit dem Gödel- und dem Fulkerson-Preis ausgezeichnet.

Der später von anderen verbesserte Algorithmus unterscheidet sich wesentlich von allen vorher bekannten polynomiellen Primalitätsbeweis-Algorithmen: Er baut für den Nachweis der – bezogen auf die Länge der Eingangswerte – polynomiellen Laufzeit auf keinen unbewiesenen Hypothesen (wie beispielsweise der verallgemeinerten Riemannschen Vermutung) auf. Die asymptotische Laufzeit des ursprünglichen Algorithmus ist O ( ( log n ) 7 , 5 + ε ) {\displaystyle {\mathcal {O}}\left((\log n)^{7,5+\varepsilon }\right)} , wobei n {\displaystyle n} die zu testende Zahl ist, O {\displaystyle {\mathcal {O}}} für das Landau-Symbol und ε {\displaystyle \varepsilon } für eine beliebig kleine positive Zahl steht.

Entstehungsgeschichte

1999 arbeitete Manindra Agrawal mit seinem Doktorvater Somenath Biswas an einer probabilistischen Methode, um die Gleichheit von Polynomen zu zeigen. Die beiden erarbeiteten daraus eine Methode für einen probabilistischen Primzahltest. Die Idee, die dahintersteckt und die sich später als sinnvoll herausstellte, ist folgender Hilfssatz:

Sei a Z , n N , n > 1 {\displaystyle a\in \mathbb {Z} ,n\in \mathbb {N} ,n>1} und g g T ( a , n ) = 1 {\displaystyle \mathrm {ggT} (a,n)=1} . Dann ist n {\displaystyle n} eine Primzahl genau dann, wenn ( X + a ) n X n + a ( mod  n ) {\displaystyle (X+a)^{n}\equiv X^{n}+a\;({\text{mod }}n)} .

Dabei ist X {\displaystyle X} eine Unbestimmte, die den Polynomring Z [ X ] {\displaystyle \mathbb {Z} [X]} erzeugt. Die n {\displaystyle n} Koeffizienten a i = ( n i ) a n i , 0 < i < n {\displaystyle a_{i}={\binom {n}{i}}a^{n-i},0<i<n} der X i {\displaystyle X^{i}} der Polynome in X {\displaystyle X} sind demnach alle auf 0 ( mod  n ) {\displaystyle \equiv 0({\text{mod }}n)} zu testen bzw. (verbessert) untereinander zu vergleichen: n {\displaystyle n} ist genau dann keine Primzahl, wenn deren kleinster Teiler k {\displaystyle k} die Ungleichung 1 < k < n {\displaystyle 1<k<n} erfüllt; dann ist aber ( n 1 k 1 ) / k {\displaystyle \textstyle {{\binom {n-1}{k-1}}/k}} keine ganze Zahl und es gilt

( n k ) ( n 1 k 1 ) n k ( mod  n ) {\displaystyle {\binom {n}{k}}\equiv {\binom {n-1}{k-1}}{\frac {n}{k}}\quad ({\text{mod }}n)} .

Für den so entstandenen Primzahltest galt, dass er nicht mit den aktuellen mithalten konnte. Im schlimmsten Falle musste man alle Koeffizienten berechnen, was ziemlich aufwendig sein konnte. Deshalb wurde die Idee zunächst nicht weiter verfolgt.

2001 nahmen die Studenten Rajat Bhattarcharjee und Prashant Pandey in ihrer Bachelorarbeit Primality Testing die Idee wieder auf. Sie erweiterten die Idee, die Polynome nicht nur modulo n {\displaystyle n} , sondern auch modulo X r 1 {\displaystyle X^{r}\!\!-\!\!1} (also mod  ( X r 1 , n ) {\displaystyle {\text{mod }}(X^{r}\!\!-\!\!1,n)} ) für ein r {\displaystyle r} in der Größenordnung von log n {\displaystyle \log n} zu berechnen. Dies hat den Vorteil, dass man ( X + a ) n mod  ( X r 1 , n ) {\displaystyle (X+a)^{n}\;{\text{mod }}\;(X^{r}\!\!-\!\!1,n)} in polynomieller Zeit berechnen kann. Nun gilt für eine Primzahl n {\displaystyle n} , dass sie diese Kongruenz erfüllt, aber es erfüllen sie nun auch Zahlen, die keine Primzahlen sind.

Die beiden untersuchten diese Kongruenz für bestimmte a {\displaystyle a} und r {\displaystyle r} , um Bedingungen an a {\displaystyle a} und r {\displaystyle r} zu stellen, damit diese Kongruenz nur noch für Primzahlen gilt. Sie stellten nach einer Versuchsreihe die folgende Vermutung (s. a. Agrawal’s Conjecture) auf:

Ist r P {\displaystyle r\in \mathbb {P} } ( P {\displaystyle \mathbb {P} } sei die Menge der Primzahlen) kein Teiler von n {\displaystyle n} und ( X + 1 ) n X n + 1 ( mod  ( X r 1 ) , n ) {\displaystyle (X+1)^{n}\equiv X^{n}+1\;{\bigl (}{\text{mod }}(X^{r}\!\!-\!\!1),n{\bigr )}} , dann ist n {\displaystyle n} entweder prim oder n 2 1 ( mod  r ) {\displaystyle n^{2}\equiv 1\;({\text{mod }}r)} .

2002 arbeiteten die beiden Studenten Neeraj Kayal und Nitin Saxena an ihrer Bachelorarbeit. Sie führten die Überlegungen ihrer Vorreiter weiter. Unter der Annahme, dass die Riemannsche Vermutung korrekt ist, konnten sie den obigen Satz beweisen. In einer leichten Vorahnung nannten sie dann ihre Bachelorarbeit Towards a deterministic polynomial-time Primality Test.

Danach brachten sie den Algorithmus mit Manindra Agrawal in seine endgültige Form. Die dann veröffentlichte Schrift erfreute sich ziemlich schnell einer großen Beliebtheit. So wurde die Korrektheit innerhalb einer Woche bestätigt und die Website hatte über zwei Millionen Besucher in der ersten Woche.

Der Algorithmus

Auf Primalität zu testen[1] sei die Zahl n > 1 {\displaystyle n>1} . Ferner seien a , b , r {\displaystyle a,b,r} natürliche Zahlen.

1: if n = ab für ein b > 1 return ZUSAMMENGESETZT;
2: r = min{ r | ordr(n) > log(n)2 };
3: if 1 < ggT(a,n) < n für ein ar return ZUSAMMENGESETZT;
4: if nr return PRIM;
5: for a = 1 to sqrt(phi(r))*log(n) do
6:     if (X+a)nXn+a (mod (Xr−1), n) return ZUSAMMENGESETZT;
7: return PRIM;

Erläuterungen

  • min { M } {\displaystyle \operatorname {min} \{M\}} findet das kleinste Element in der (nach unten beschränkten) Menge M {\displaystyle M} .
  • ord r ( n ) {\displaystyle \operatorname {ord} _{r}(n)} ist die Ordnung von n ( mod  r ) {\displaystyle n\;({\text{mod }}r)} ; das ist die kleinste Zahl k > 0 {\displaystyle k>0} , für die n k 1 ( mod  r ) {\displaystyle n^{k}\equiv 1\;({\text{mod }}r)} gilt.
  • log ( n ) := log 2 ( n ) {\displaystyle \log(n):=\log _{2}(n)} ist der Logarithmus von n {\displaystyle n} zur Basis 2.
  • ggT ( a , n ) {\displaystyle \operatorname {ggT} (a,n)} ist der größte gemeinsame Teiler von a {\displaystyle a} und n {\displaystyle n} .
  • sqrt ( X ) {\displaystyle \operatorname {sqrt} (X)} berechnet die Quadratwurzel von X {\displaystyle X} .
  • phi ( r ) := φ ( r ) {\displaystyle \operatorname {phi} (r):=\varphi (r)} ist die Anzahl der zu r {\displaystyle r} teilerfremden Zahlen im Bereich von 1 bis r {\displaystyle r} : die Eulersche Phi-Funktion.
  • X {\displaystyle X} ist die Basis (Unbestimmte) des Polynomrings Z [ X ] {\displaystyle \mathbb {Z} [X]} .
  • Da das zweifach erzeugte Ideal ( ( X r 1 ) , n ) {\displaystyle {\bigl (}(X^{r}\!\!-\!\!1),n{\bigr )}} kein Hauptideal im Ring Z [ X ] {\displaystyle \mathbb {Z} [X]} ist, ist bei ( mod  ( X r 1 ) , n ) {\displaystyle \not \equiv {\bigl (}{\text{mod }}(X^{r}\!\!-\!\!1),n{\bigr )}} die Teilbarkeit eines Polynoms sowohl durch X r 1 {\displaystyle X^{r}\!\!-\!\!1} wie durch n {\displaystyle n} zu untersuchen. Das heißt, die Inkongruenz   u v ( mod  ( X r 1 ) , n ) {\displaystyle u\not \equiv v\;{\bigl (}{\text{mod }}(X^{r}\!\!-\!\!1),n{\bigr )}}   ist gleichbedeutend zur Implikation
    u v ( mod  ( X r 1 ) ) u v ( mod  n ) {\displaystyle u\equiv v\;{\bigl (}{\text{mod }}(X^{r}\!\!-\!\!1){\bigr )}\quad \implies \quad u\not \equiv v\;({\text{mod }}n)} .
  • Eigentlich erschließt sich nach der Bejahung von
    r a : ( X + a ) n X n + a ( mod  ( X r 1 ) , n ) {\displaystyle \forall r\forall a\;\colon \;(X+a)^{n}\equiv X^{n}+a\quad {\bigl (}{\text{mod }}(X^{r}\!\!-\!\!1),n{\bigr )}}
(durch die Anweisungsfolge 5, 6) in der Anweisung 7 nur, dass n {\displaystyle n} eine Primzahlpotenz ist. Wegen der Anweisung 1 ist aber n {\displaystyle n} eine Primzahl.

Laufzeitverhalten

Der Algorithmus rechnet de facto im endlichen Ring ( ( Z / ( n ) ) [ X ] ) / ( X r 1 ) {\displaystyle {\Bigl (}{\bigl (}\mathbb {Z} /(n){\bigr )}[X]{\Bigr )}/(X^{r}\!\!-\!\!1)} mit n r {\displaystyle n\cdot r} Elementen.

Die Beachtung der Kongruenz ( mod  ( X r 1 ) ) {\displaystyle \equiv {\bigl (}{\text{mod }}(X^{r}\!\!-\!\!1){\bigr )}} im Polynomring Z [ X ] {\displaystyle \mathbb {Z} [X]} reduziert die Menge der bei der Exponentiation ( X + a ) n {\displaystyle (X+a)^{n}} entstehenden Monome auf { X 0 , X 1 , , X r 1 } {\displaystyle \{X^{0},X^{1},\ldots ,X^{r-1}\}} . Die Beachtung der Kongruenz ( mod  n ) {\displaystyle \equiv ({\text{mod }}n)} beschränkt die Stellenzahl der dabei entstehenden Koeffizienten auf log n . {\displaystyle \log n.}

Somit kostet die Feststellung von

( X + a ) n X n + a ( mod  ( X r 1 ) , n ) {\displaystyle (X+a)^{n}\equiv X^{n}+a\quad ({\text{mod }}(X^{r}\!\!-\!\!1),n)}

bei wiederholtem Quadrieren O ( r 2 log 3 n ) {\displaystyle {\mathcal {O}}(r^{2}\log ^{3}n)} .[2] Bei Schneller Fourier Multiplikation[3] ist der Aufwand in O ( r log 2 n ) {\displaystyle {\mathcal {O}}(r\log ^{2}n)} .

Nach Agrawal, Kayal und Saxena

In den folgenden Monaten nach der Entdeckung erschienen neue Varianten (Lenstra 2002, Pomerance 2002, Berrizbeitia 2003, Cheng 2003, Bernstein 2003a/b, Lenstra und Pomerance 2003), die die AKS-Geschwindigkeit um Größenordnungen verbesserten. Wegen der großen Anzahl an Varianten sprechen Crandall und Papadopoulos in ihrem Aufsatz On the implementation of AKS-class primality tests (dt.: Über die Implementation von Primzahltests der AKS-Klasse) von März 2003 von der Klasse der AKS-Algorithmen, statt vom AKS-Algorithmus.

Der Algorithmus von Lenstra und Pomerance terminiert in O ( ( log n ) 6 + ε ) {\displaystyle {\mathcal {O}}\left((\log n)^{6+\varepsilon }\right)} . Die Laufzeit des AKS-Algorithmus bewegt sich in der Praxis jedoch in ähnlichen Größenordnungen, da der Parameter r {\displaystyle r} meist wenig oberhalb von log 2 n {\displaystyle \log ^{2}n} gefunden werden kann.

Agrawal, Kayal und Saxena haben mit der obigen Vermutung einen ähnlichen Algorithmus aufgestellt:

Man suche zuerst ein r P {\displaystyle r\in \mathbb {P} } mit r ( n 2 1 ) {\displaystyle r\nmid (n^{2}-1)} (so ein r {\displaystyle r} liegt im Intervall [ 2 , 4 log n ] {\displaystyle [2,4\log n]} ). Mit diesem Algorithmus erhält man eine Laufzeit von O ( ( log n ) 3 + ε ) {\displaystyle {\mathcal {O}}\left((\log n)^{3+\varepsilon }\right)} . Lenstra und Pomerance haben zu dieser Vermutung in Remarks on Agrawal’s Conjecture eine Heuristik zum Finden von möglichen Gegenbeispielen angegeben. Ob es Zahlen wie die in deren Vermutung angenommenen gibt, ist jedoch bisher nicht bekannt.

Literatur

  • Volker Diekert, Manfred Kufleitner, Gerhard Rosenberger: Diskrete algebraische Methoden: Arithmetik, Kryptographie, Automaten und Gruppen. De Gruyter, Berlin 2013, ISBN 978-3-11-031260-7. 
  • Martin Dietzfelbinger: Primality testing in polynomial time. From randomized algorithms to “PRIMES is in P” (= Lecture Notes in Computer Science. Nr. 3000). Springer, Berlin 2004, ISBN 3-540-40344-2. 

Weblinks

  • M. Agrawal, N. Kayal, N. Saxena: PRIMES is in P. (PDF; 195 kB).
  • Eric W. Weisstein: AKS Primality Test. In: MathWorld (englisch).
  • R. Crandall, J. Papadopoulos: On the implementation of AKS-class primality tests. (Memento vom 3. April 2003 im Internet Archive). (PDF; 104 kB). 18. März 2003.
  • O. Braun, S. Schönnenbeck: Der AKS-Primzahltest Vortrag 2009.
  • Folkmar Bornemann: Ein Durchbruch für „Jedermann“. (PDF; 487 kB). Artikel über den AKS-Primzahltest mit Fotos der drei indischen Forscher.
  • H. Lenstra, C. Pomerance: Remarks on Agrawal’s Conjecture.
  • ANDREW GRANVILLE: [1] IT IS EASY TO DETERMINE WHETHER A GIVEN INTEGER IS PRIME, in BULLETIN (New Series) OF THE AMERICAN MATHEMATICAL SOCIETY, Vol. 42, (2004), (englisch)

Einzelnachweise

  1. Agrawal, Kayal, Saxena PRIMES is in P
  2. Manindra Agrawal, Neeraj Kayal and Nitin Saxena: PRIMES is in P
  3. D. E. Knuth. The Art of Computer Programming, Vol II, Seminumerical Algorithms. Addison Wesley, 1998.