aus der Übersetzung von Maser (1889) Dass die Aufgabe, die Primzahlen von den zusammengesetzten zu unterscheiden und letztere in ihre Primfactoren zu zerlegen, zu den wichtigsten und nützlichsten der gesamten Arithmetik gehört und die Bemühungen und den Scharfsinn sowohl der alten als auch der neueren Geometer in Anspruch genommen hat, ist so bekannt, dass es überflüssig wäre, hierüber viele Worte zu verlieren. [. . . ] ausserdem dürfte es die Würde der Wissenschaft erheischen, alle Hülfsmittel zur Lösung jenes so eleganten und berühmten Problems fleissig zu vervollkommnen. Problema, numeros primos a compositis dignoscendi . . . ad gravissima ac utilissima tabus arithmeticae pertinere. . . . . . scientiae dignitas requirere videtur, ut omnia subsidia ad solutionem problematis tam elegantis ac celebris sedulo excolantur. J. C. F. Gauss (1777–1855), Disquisitiones Arithmeticae, Artikel 329 Trotzdem muss man gestehen, dass alle bisher angegebenen Methoden entweder auf sehr specielle Fälle beschänkt oder so mühsam und weitläufig sind, dass sie [. . . ] auf grössere Zahlen aber meistenteils kaum angewendet werden können. 1 K. Gödel (Brief an J. von Neumann, 1956) 2 Häufigkeit von Primzahlen Wenn es eine Maschine mit ... gäbe, hätte das Folgerungen von der grössten Tragweite. Es würde offenbar bedeuten, dass man trotz der Unlösbarkeit des Entscheidungsproblems die Denkarbeit der Mathematiker bei ja-oder-nein-Fragen vollständig (abgesehen von der Aufstellung der Axiome) durch Maschinen ersetzen könnte. • Primzahlsatz ... bedeutet, dass die Anzahl der Schritte gegenüber dem blossen Probieren von N auf log N verringert werden kann. So starke Verringerungen kommen aber bei anderen finiten Problemen durchaus vor, z.B. bei der Berechnung eines quadratischen Restsymbols durch wiederholte Anwendung des Reziprozitätsgesetzes. Es wäre interessant zu wissen, wie es damit z.B. bei der Feststellung, ob eine Zahl Primzahl ist, steht und wie stark im allgemeinen bei finiten kombinatorischen Problemen die Anzahl der Schritte gegenüber dem blossen Probieren verringert werden kann. • “Bertrands Postulat” 3 lim n→∞ ]{p ≤ n ; p Primzahl} =1 n/ ln(n) d.h. ]{p ≤ n ; p Primzahl} ∼ n ln n Für jedes n ∈ Z>1 enthält das Intervall [n + 1 . . . 2n − 1] mindestens eine Primzahl 4 Primzahltests Pseudo-Primzahltests • Probedivision: n ist Primzahl ⇔ ∀i(2 ≤ i ≤ √ • Sei A(n, a) eine Eigenschaft ganzer Zahlen mit n) : i 6 |n n Primzahl ⇒ ∀a (1 < a < n) : A(n, a) is prime (int n) { for (int i = 2; i ≤ Wird w (1 < w < n) gefunden mit ¬A(n, w), so ist n keine Primzahl: √ n; i++) ∃w (1 < w < n) : ¬A(n, w) ⇒ n ist keine Primzahl if (i | n) return FALSE; return TRUE; Solch ein w heisst Zeuge (witness) für die Zusammengesetztheit von n } • Beispiel: Teilbarkeitstest logarithmisches Kostenmodell: D(n, a) : a 6 | n – input-Grösse ist log n √ 1 – Anzahl der Schleifendurchläufe ist O( n) = O(2 2 log n ) • Beispiel: Euklid-Test E(n, a) : ggT(n, a) = 1 – Jede Probedivision erfordert O(log2 n) Bit-Operationen – Laufzeit für m-stelliges n ist im worst-case O(m2 · 2m/2 ) • Beispiel: Fermat-Test F (n, a) : ggT(n, a) = 1 ⇒ an−1 ≡ 1 (mod n) 5 6 • Beispiel: SPP-Test (“strong probable prime”) • Gelingt es trotz intensiver Bemühungen nicht, einen Zeugen für die Zusammengesetztheit von n aufzutreiben, wird man n für eine Primzahl halten M R(n, a) : sei n − 1 = 2t · u mit ungeradem u au ≡ 1 mod n oder i au·2 ≡ −1 mod n für ein i mit 0 ≤ i < t • Unter den Annahmen – für n, a mit 1 < a < n ist die Un/Gültigkeit von A(n, a) leicht zu überprüfen – ist n keine Primzahl, so sind Zeugen für die Zusammengesetztheit von n häufig – Begründung ∗ n Primzahl ⇔ Zn Körper ∗ In einem Körper hat die Gleichung x2 = 1 genau zwei Lösungen x = ±1 (allgemeiner: x2 = 1 hat für n = pe (p ≥ 3 Primzahl) in Zn genau die beiden Lösungen x = ±1) ∗ wird in Z∗n ein Element z 6= ±1 mit z 2 = 1 gefunden, so ist n keine Primzahl kann man so verfahren – wähle zufällig Kandidaten k1 , k2 , . . . , kr mit 1 < ki < n und überprüfe A(n, ki )(1 ≤ i ≤ r) – wird dabei mindestens ein Zeuge für die Zusammengesetztheit von n gefunden, d.h. ¬A(n, ki ), so ist n in der Tat zusammengesetzt – wird kein Zeuge für die Zusammengesetztheit von n gefunden, so wird n als Primzahl deklariert — dies ist mit nur sehr geringer Wahrscheinlichkeit eine falsche Entscheidung – beachte sukzessive Quadrierungen au mod n , a2u mod n , a2 2 u mod n , a2 7 3 u mod n , . . . , a2 t u mod n 8 Diskussion der Beispiele • Teilbarkeitstest Unbrauchbar, da es Nicht-Primzahlen n mit nur zwei Teilern (6= 1, n) gibt (Teilbarkeits-Zeugen) • Euklid-Test Unbrauchbar, da es Nicht-Primzahlen n mit nur wenigen Euklid-Zeugen gibt • Fermat-Test • Der Primzahltest von Miller-Rabin — Strategie – wähle (iteriert und zufällig) Zahlen a ∈ Zn , a 6= {0, 1}, mit ggT(n, a) = 1 (falls a mit ggT(n, a) 6= 1: sowieso fertig) – berechne an−1 mod n durch iteriertes Quadrieren und Multiplizieren: j a(n−1) div 2 für j = k, k − 1, k − 2, . . . , 1, 0, wobei k = `(n − 1) + 1 – falls auf diesem Weg eine Situation z 7→ z 2 = 1 mit z 6= ±1 angetroffen wird: Zeuge für Zusammengesetztheit von n gefunden Unbrauchbar, da es zusammengesetzte Zahlen n gibt mit ∀1 < a < n : ggT(n, a) = 1 ⇒ an−1 ≡ 1(mod n) d.h. alle Fermat-Zeugen sind schon Euklid-Zeugen 10 9 Miller Rabin (int n) { choose a ∈ [2 : n − 1] at random; /* primes are odd except for 2, which is an odd prime :-) */ if (n == 2) return TRUE; if (n == 1 || even(n)) return FALSE; /* primes are relatively prime to a */ if (ggT(a, n) > 1) return FALSE; /* compute z = an−1 #= 1 mod n using iterated squaring */ let (bk , . . . , b0 ) be the binary representation of n − 1; int z = 1; for (int i = k; i ≥ 0; i−−) { int x = z; z = z 2 mod n; /* primes allow only trivial solutions of x2 ≡ 1 mod p */ if ((z == 1) && (x #= 1) && (x #= n − 1)) return FALSE; if (bi == 1) z = z · a mod n; } if (z #= 1 mod n) return FALSE; /* z = an−1 */ return TRUE; /* no witness found: in dubio pro reo */ } 11 Beachte: ist n − 1 = 2t · u mit ungeradem u, so sind die letzten t + 1 Werte von z beim Quadrieren und Multiplizieren au mod n , a2u mod n , a2 2 u mod n , a2 3 u mod n , . . . , a2 und die letzten t Operationen sind nur Quadrierungen 12 t u mod n Lemma: Miller-Rabin-Zeugen sind häufig, genauer: ist n eine zusammengesetzte Zahl, so ist die Anzahl der Miller-Rabin-Zeugen für diese Tatsache mindestens (n − 1)/2 • der einfache Fall: es gibt in Z∗n einen Fermat-Zeugen, d.h. ein x ∈ Z∗n mit xn−1 ≡ 6 1 mod n zu diesem Zweck wird gezeigt: • Nicht-Zeugen sind Elemente von Z∗n (klar!) – B = {b ∈ Z∗n ; bn−1 ≡ 1 mod n} ist eine Untergruppe von Z∗n • Die Menge der Nicht-Zeugen ist eine echte Untergruppe von Z∗n – alle Nicht-Zeugen gehören zu B • Wegen des Satzes von Lagrange hat diese Untergruppe ≤ ]Z∗n /2 ≤ (n − 1)/2 Elemente – wegen x ∈ / B ist B eine echte Untergruppe von Z∗n • es gilt sogar (Beweis etwas aufwendiger): die Untergruppe der Nicht-Zeugen hat ≤ ϕ(n)/4 Elemente 13 • der weniger einfache Fall: es gibt in Z∗n keine Fermat-Zeugen, d.h. xn−1 ≡1 mod n für alle x ∈ Z∗n – der einfache Unter-Fall des etwas weniger einfachen Falles: n = pe mit Primzahl p > 2 und e > 2 ∗ Fakt: Z∗pe ist eine zyklische Gruppe ∗ ]Z∗pe = ϕ(pe ) = pe−1 (p − 1) ∗ Ist a ∈ Z∗pe ein Element der Ordnung ϕ(pe ), so gilt e aϕ(p ) ≡ 1 (mod n) und an−1 ≡ 1 (mod n), also ϕ(pe ) = pe−1 (p − 1) | pe − 1 : unmöglich! 15 14 – der etwas weniger einfache Unter-Fall des etwas weniger einfachen Falles: n = n1 · n2 mit n1 , n2 > 1 und ggT(n1 , n2 ) = 1 ∗ n − 1 = 2t · u mit ungeradem u, für a ∈ Z∗n betrachte [a] = hau mod n , a2u mod n , a2 2 u mod n , a2 3 u mod n , . . . , a2 t u mod ni ∗ beachte: die letzte Komponente von [a] ist immer = 1; ∗ sei j mit 0 ≤ j < t maximal mit der Eigenschaft, dass es ein v ∈ Z∗n j gibt v 2 u ≡ −1 mod n j ∗ B = {x ∈ Z∗n ; x2 u ≡ ±1 mod n} = 6 ∅ ∗ ∗ B ist eine Untergruppe von Zn , die alle Nicht-Zeugen enthält ∗ B ist eine echte Untergruppe von Z∗n : j · sei v ∈ Z∗n mit v 2 u ≡ −1 mod n j j · ⇒ v 2 u ≡ −1 mod n1 und v 2 u ≡ −1 mod n2 · Konstruiere mittels Chinesischem Restesatz w ∈ Z∗n mit w ≡ v mod n1 und w ≡ 1 mod n2 j j · ⇒ w2 u ≡ −1 mod n1 und w2 u ≡ 1 mod n2 ⇒ w ∈ /B 16 Ein wesentlich schwieriger darzustellendes und zu begründendes Verfahren von Adleman und Huang (1992) zeigt Theorem (Miller, Rabin, 1976) Der Miller-Rabin-Primzahltest beurteilt bei m Iterationen eine zusammengesetzte Zahl n fälschlicherweise als Primzahl mit einer Wahrscheinlichkeit < (1/2)m bei einer Laufzeit von O(m · `(n)3 ) Primes ∈ RP Aus beiden Aussagen zusammen erhält man In der Terminologie der Komplexitätstheorie Primes ∈ co-RP wobei: RP = random polynomial time = Klasse der Probleme mit effizienten probabilistischen Entscheidungsverfahren mit einseitigem Fehler (“biased Monte Carlo”) Primes ∈ ZPP = RP ∩ co-RP wobei: ZPP = random polynomial time = Klasse der Probleme mit probabilistischen Entscheidungsverfahren, die im Mittel effizient sind (“Las Vegas”) 17 Weitere Informationen zur Komplexitätssituation für Primes • Primzahlen sind effizient verifizierbar (Pratt, 1975) 18 • Im August 2002 wurde von Agrawal, Kayal, Saxena das lange offene Problem endlich gelöst: Primes ∈ NP • Zusammen mit dem offensichtlichen (!!) Primes ∈ co-NP ergibt sich Primes ∈ NP ∩ co-NP • Miller hat 1976 gezeigt, dass Primzahlen deterministisch mit Aufwand O(log5 n) erkannt werden können, denn ist n keine Primzahl, dann ist kleinste MR-Zeuge für die Zusammengesetztheit von n kleiner als 2 ln2 n (Bach, 1985) Hierbei wird allerdings eine bislang unbewiesene Hypothese des Zahlentheorie (ERH) verwendet! • Es gibt einen (in der Praxis!!) sehr effizienten deterministischen Primzahltest von Adelman, Pomerance, Rumeley (1983) mit Laufzeit Primes ∈ P Der AKS-Algorithmus – ist verblüffend einfach (⇒ folgende Seite) – die Begründung der Korrektheit ist nicht ganz so einfach, aber interessierten Studenten durchaus zugänglich – hat eine (bewiesene!) Laufzeit O(log12 n) (aber vermutlich real noch deutlich besser) • Hinweis: sehr instruktiver Artikel mit vielen weiteren Hinweisen F. Bornemann, Primes is in P: Ein Durchbruch für “Jedermann”, Mitteilungen der Deutschen Mathematiker-Vereinigung, 4-2002, 14–21. engl. Übersetzung: Primes is in P: A Breakthrough for “Everyman”, Notices of the American Mathematical Society 50/5 (2003), 545–552. O((log n)c. log log log n ) 19 20 Der Algorithmus von Agrawal, Kayal, Saxena Input: integer n > 1 if n = ab for a ∈ N and b > 1 then output COMPOSITE end if Find the smallest r such that ordr (n) > 4 log2 n if 1 < (a, n) < n for some a ≤ r then output COMPOSITE end if if n ≤ r then output PRIME end if p for a = 1 to b2 ϕ(r) log nc do if (X + a)n 6= X n + a (mod X r − 1, n) then output COMPOSITE end if end for output PRIME 21 • Literaturhinweis: R. Crandall, C. Pomerance, Prime Numbers, A Computational Perspective Springer-Verlag, 2001. • siehe auch Webseite zur Vorlesung 22