PRIMHEITSZERTIFIKATE UND TEST VON PROTH
Transcription
PRIMHEITSZERTIFIKATE UND TEST VON PROTH
PRIMHEITSZERTIFIKATE UND TEST VON PROTH Seminar Primzahltests von zur Gathen & Müller & Krummel Christian Viergutz Sommersemester 2003 Dieser Artikel befasst sich mit Beweisen für die Primheit natürlicher Zahlen. Dazu werden Beispiele für Zertikate angesprochen und gezeigt, dass das Problem, von einer nat. Zahl zu bestimmen, ob sie prim ist, in N P liegt. Darüberhinaus wird der Satz von Proth besprochen, der eine eziente Überprüfung auf Primheit von Zahlen der Form k · 2s + 1 bietet. Zusammenfassung. 1. Primheitsbeweise 1.1. Primheitsbeweise und der kleine Satz von Fermat. Der kleine Satz von Fermat sagt bekanntlich, dass für eine Primzahl p und jede zu p teip−1 lerfremde ganze Zahl a gilt: a ≡ 1 (mod p). Hiermit kann in vielen Fällen gezeigt werden, dass eine zusammengesetzte Zahl auch wirklich zusammengesetzt ist. Denn oft kann zu einer (vermutlich) zusammengesetzten Zahl ein Fermat-Zeuge n a durch einfaches Ausprobieren (zufällige Wahl) gefunden n−1 werden, für welchen ggT(a, n) = 1 und a 6≡ 1 (mod n) gilt. Im Hinblick auf Primzahltests ist es ungünstig, dass die Umkehrung des 20 Fermatschen Satzes nicht gilt. Ein Gegenbeispiel ist die Kongruenz 8 ≡ 1 (mod 21) mit ggT(8, 21) = 1, denn 21 ist nicht prim. Auch der Gedanke, dieser Fall sei eine Ausnahme und die Basis 8 schlecht gewählt, trügt: Für n−1 die sogenannten Carmichael-Zahlen ist a ≡ 1 (mod n) für jedes zu n teilerfremde a. Die kleinsten drei Carmichael-Zahlen sind 561, 1105 und 1729. Diese Beobachtungen machen deutlich, dass der kleine Satz von Fermat nicht benutzt werden kann, um wirklich zu beweisen, dass eine Zahl prim ist. Die folgenden Abschnitte beziehen sich hauptsächlich auf Bach & Shallit (1996), Kapitel 9.1. 2 Christian Viergutz 1.2. Drei Anforderungen an einen Primzahltest. Beim Entwurf von Primzahltests versucht man häug, die folgenden drei Forderungen an einen solchen Test möglichst gut zu erfüllen: 1. Geschwindigkeit: Ein Primzahltest sollte, wenn möglich, in Polynomi- alzeit zeigen, ob eine Zahl prim ist oder nicht. Der zugehörige Algorithmus sollte demnach eine Laufzeit aufweisen, die in der Klasse P liegt. 2. Allgemeinheit: Der Algorithmus sollte für jede Primzahl funktionieren, nicht nur für Primzahlen besonderer Form, wie z.B. Mersenne- oder Fermat-Primzahlen. 3. Korrektheit: Von einem Primzahltest möchten wir erwarten können, dass er einen Beweis (und keine Wahrscheinlichkeit) dafür liefert, dass eine Zahl prim ist. Da oft ein Kompromiss bei der Erfüllung dieser Forderungen gefunden werden muss, könnte man in einem ersten Ansatz auf die erste Forderung, nämlich die Geschwindigkeit, verzichten. Derartige Algorithmen benötigen Zusatzinformationen über die Zahl als Eingabe, welche oft nicht leicht bzw. schnell gefunden werden können. Allerdings garantieren sie dann, einen Beweis für Primheit anzugeben, falls die angegebene Zahl wirklich prim ist. Meistens benötigen diese Verfahren die Faktorisierung als Teilproblem, wofür jedoch bis heute noch kein schnelles (Polynomialzeit-) Verfahren bekannt ist. Ein Ansatz, um Primheit für sehr groÿe Zahlen zu testen, besteht darin, sich bei der Suche auf Primzahlen bestimmter Form zu beschränken, denn für diese Zahlen gewinnt der Faktor Geschwindigkeit immer mehr an Bedeutung. Beispielsweise hat diese Methode mit Hilfe der Mersenne'schen Zahlen (Zahp 2k len der Form n = 2 − 1) oder Fermat-Zahlen (n = 2 + 1) zur Entdeckung der gröÿten, bislang bekannten Primzahlen geführt. Dafür wurde aber die Allgemeinheit der Tests geopfert. Der dritte Ansatz verzichtet auf einen exakten Beweis, also Punkt 3. Bei sogenannten probabilistischen Tests wird eine Menge von Zufallszahlen benutzt, um eine Zahl auf Primheit zu überprüfen. Dabei kann es vorkommen, dass eine Antwort fehlerhaft ist. Allerdings ist die Fehlerwahrscheinlichkeit eines solchen Tests für eine beliebige Zahl meist beweisbar gering. Siehe dazu Rabin (1980) und Solovay & Strassen (1977). Primheitszertikate und Test von Proth 3 In diesem Kapitel widmen wir uns zunächst nur dem ersten Ansatz. Eine Anwendung des zweiten Ansatzes diskutieren wir weiter unten (s. Abschnitt 2 auf Seite 10). 1.3. Z∗p ist zyklisch. Dieser Abschnitt verfolgt das Ziel zu zeigen, dass für Z∗p zyklisch ist. Dazu werden zunächst einige Lemmata benötigt: jede Primzahl p die Einheitengruppe Sei P (x) ∈ K[x] ein Polynom über dem Körper K mit Grad d. P besitzt dann höchstens d Nullstellen in diesem Körper. Lemma 1.1. a ∈ K mit P (a) = 0 eine Nullstelle von P . Dann existieren Q, R ∈ K[x] mit P (x) = Q(x)·(x−a)+R(x), wobei deg(R) < 1. Weiterhin ist 0 = P (a) = Q(a) · (a − a) + R(a) = R(a). Daraus folgt R = 0 (Nullpolynom) und damit P (x) = Q(x) · (x − a). Aus der letzten Gleichung erhält man deg(P ) = deg(Q) + 1. Induktion über den Grad d liefert die Behauptung. Sei Beweis. Falls p ∈ N prim ist, dann hat die Kongruenz xp−1 ≡ 1 (mod p) genau p − 1 Lösungen. Lemma 1.2. Nach dem kleinen Satz von Fermat gilt die angegebene Kongru- Beweis. p teilerfremden 1, 2, . . . , p − 1. enz für alle zu Elemente Lemma 1.3. Lösungen. ganzen Zahlen x. Dies sind in Zp genau die Falls d | p − 1, dann hat die Kongruenz xd ≡ 1 (mod p) genau d Zur Vereinfachung sei zunächst e := c · d = p − 1. Wir bilden nun e d den Quotienten der Polynome P (x) := x − 1 und Q(x) := x − 1: Beweis. =x0 =1 z }| { (xe − 1)/(xd − 1) = xe−d + xe−2d + . . . + xe−cd Daraus folgt, dass p−1 Q(x) | P (x). P (x) genau e = der Grade d und e − d. Das höchstens e − d Nullstellen Nach Lemma 1.2 besitzt Nullstellen und zerfällt in zwei Polynome letztgenannte Polynom kann nach Lemma 1.1 Q(x) mindestens d Nullstellen besitzen muss (um die p − 1 Nullstellen von P (x) möglich zu machen). Also besitzt Q(x) genau d Nullstellen und die Behauptung ist bewiesen. haben, woraus folgt, dass Christian Viergutz 4 Lemma 1.4. ord b Sei G eine abelsche Gruppe und a, b ∈ G mit ggT(m, n) = 1. Dann gilt ord(ab) = nm. = n, wobei ord a = m und (ab)mn = amn · bmn = 1n · 1m = 1. Sei t := ord(ab). Dies impliziert t | mn. Wegen ggT(m, n) = 1 existieren x, y ∈ Z mit mx + ny = 1, 1 mx+ny woraus direkt folgt: a = a = a = amx · any = any . Sei nun angenommen, dass t < mn. Dann existiert eine Primzahl q mit mn = q · k ⇒ mn = tk ⇒ (ab)mn/q = (ab)tk = 1. q | t , also gibt es ein k mit mn t q Weil q prim ist, teilt es mindestens einen der beiden Faktoren m und n. Diese sind aber teilerfremd, weshalb q genau einen der beiden teilt. Gelte o.B.d.A. q | m. Dann folgt: mn/q =1 amn/q · b|mn/q {z } = a Beweis. Es gilt: =1 Daraus erhält man mit a = any amn/q = am/q (von oben) direkt: ny = 1 ⇒ (any )m/q = am/q = 1 Dies ist aber ein Widerspruch zu ord a t = mn = m, da m/q < m ist. Also gilt und das Lemma ist bewiesen. Mit Hilfe dieser Lemmata können wir nun den folgenden Satz zeigen. Für jede Primzahl p ist die Einheitengruppe Z∗p zyklisch mit der Ordnung p − 1. Satz 1.5. Q p−1 = i pei i gegeben. e ei p i Nach Lemma 1.3 besitzt die Kongruenz x i ≡ 1 (mod p) genau pi Lösungen, ei −1 ei ei viele, nämlich die da pi | p − 1. Unter diesen pi Lösungen gibt es nur pi e −1 pi i k Lösungen von x ≡ 1 (mod p), die eine Ordnung pi mit k < ei haben. ei ei −1 = piei −1 · (pi − 1) Elemente der Aus diesem Grund gibt es genau pi − pi ei ei −1 · (pi − 1) ≥ pei i −1 ≥ 1 ist, können wir für jedes i ein Ordnung pi . Da pi ei Element xi mit Ordnung pi nden. Q Sei nun x := i xi . Weil die Ordnungen der xi paarweise teilerfremd sind Beweis. Sei zunächst die Primfaktorzerlegung von (Potenzen unterschiedlicher Primzahlen), folgt nach Lemma 1.4, dass sich auch die Ordnungen multiplizieren, wodurch wir erhalten: ! ord(x) = ord Y i xi = Y i ord(xi ) = Y pei i = p − 1 i Z∗p genau p − 1 Elemente enthält und wir ein Element x p − 1 gefunden haben, ist diese Gruppe damit zyklisch. Da mit Ordnung Primheitszertikate und Test von Proth 5 1.4. Prinzip des Tests durch die Umkehrung des Fermat-Satzes. Obwohl der kleine Satz von Fermat wie beschrieben alleine keinen Beweis für Primheit liefern kann, lassen sich doch Methoden formulieren, die ihn benutzen. Die dahinter stehende Idee liegt darin, ein Element in der Ein∗ heitengruppe Zn mit hinreichend groÿer Ordnung zu nden. Was darunter zu verstehen ist, beschreibt das folgende Ein n ∈ N ist genau dann eine Primzahl, wenn die Einheitenein Element der Ordnung n − 1 besitzt. Lemma 1.6. gruppe Z∗n Beweis. Wenn n prim ist, so ist Z∗n nach Satz 1.5 eine zyklische Gruppe, die ein Element der Ordnung n − 1 enthält. Umgekehrt, falls es ein Element ∗ der Ordnung n − 1 in Zn gibt, dann besitzt die Einheitengruppe die Kar∗ dinalität |Zn | = n − 1, was nur für Primzahlen gilt, denn dann sind alle k ∈ {1, . . . , n − 1} teilerfremd zu n. Diese Beziehung dient als Grundlage für den folgenden Eine Zahl n ∈ N ist genau dann eine Primzahl, falls ein a existiert mit a ≡ 1 (mod n) und a(n−1)/q 6≡ 1 (mod n) für alle Primzahlen q mit q | n − 1. Satz 1.7 (Kraitchik, Lehmer). n−1 a ein Generator von Z∗n . Die Zahl a hat dann die Ordnung n − 1 und es folgt: an−1 ≡ 1 (mod n). Weiterhin gilt ∀q | n − 1 : a(n−1)/q 6≡ 1 (mod n), denn die Kongruenz a(n−1)/q ≡ 1 (mod n) verstieÿe gegen die Ordnung n − 1 von a wegen (n − 1)/q < n − 1. ⇐: Sei a wie oben deniert und m := ordn a die Ordnung von a modulo n−1 n. Da a ≡ 1 (mod n) ist, folgt m | n − 1. Angenommen m < n − 1, dann n−1 n−1 , also = k · q für ein k ∈ N. Es folgt: gibt es eine Primzahl q mit q | m m Beweis. ⇒: Sei n eine Primzahl und a(n−1)/q = akm ≡ 1 (mod n) Dies ist aber ein Widerspruch zur Voraussetzung! Also gilt nach Lemma 1.6 ist n m = n−1 und prim. Bemerkung 1.8. Falls die vollständige Primfaktorzerlegung von n − 1 bekannt und n prim ist, dann kann in polynomieller Zeit ein Beweis dieser Tatsache erzeugt werden (siehe dazu Bach & Shallit (1996), S. 268). 1.5. Zertikate für Primzahlen. Im nun folgenden Abschnitt wollen wir uns mit der Frage beschäftigen, ob es leicht zu überprüfende Zeugen (bzw. Zertikate) für die Primheit einer ganzen Zahl gibt. Zur Erinnerung geben wir eine Denition für Verizierer und Zertikate bzw. Zeugen an. 6 Christian Viergutz (i) Ein Verikationsalgorithmus oder auch Verizieist ein Algorithmus A mit zwei Eingabeparametern x und c, wobei der erste Parameter x die eigentliche Eingabe darstellt und der zweite Parameter eine binäre Zeichenkette c ist, welche Zertikat oder auch Zeuge genannt wird. Definition 1.9. rer (ii) Ein Verizierer A veriziert eine Eingabe x, falls ein Zertikat c existiert mit A(x, c) = 1. Dabei liefert A entweder 0 (falsch) oder 1 (wahr) zurück. (iii) Die von einem Verikationsalgorithmus A verizierte Sprache ist L = {x ∈ {0, 1}∗ ∃ c ∈ {0, 1}∗ : A(x, c) = 1} Anhand dieser Denition können wir nun die Sprachklasse NP folgen- dermaÿen denieren: Die Komplexitätsklasse N P ist die Menge der Sprachen, die von einem Verizierer in polynomieller Zeit in der Eingabelänge veriziert werden können. Nach Denition 1.9 gehört eine Sprache L also zu N P , falls es einen Polynomialzeit-Algorithmus A mit zwei Eingabeparametern und eine Konstante b ∈ N gibt, so dass Definition 1.10. o n L = x ∈ {0, 1}∗ ∃ c : |c| = O(|x|b ) ∧ A(x, c) = 1 Um diese Denitionen aus der Komplexitätstheorie mit dem Problem der Überprüfung von ganzen Zahlen auf Primheit zu verknüpfen, denieren wir ∗ dieses Problem als Sprache über dem Alphabet {0, 1} : Wir nennen Primes die Menge aller binären Darstellungen von Primzahlen. Analog dazu bezeichne Composites die Menge aller Binärzahlen, die einen nichttrivialen Teiler besitzen. Definition 1.11. Es ist oensichtlich, dass das Problem Composites in NP liegt, da wir sehr leicht einen polynomiellen Verikationsalgorithmus dafür angeben können: Algorithmus 1.12. Eingabe: Die Binärdarstellungen der Zahlen Ausgabe: Falls n = p · q, 1. Überprüfe, ob und n−1 p sind. und n, p, q . dann zusammengesetzt(1), sonst unbekannt(0). q die Binär-Codierungen zweier Zahlen zwischen 2 Primheitszertikate und Test von Proth k = p · q. k = n, gib 1 zurück, 7 2. Berechne 3. Falls sonst 0. n ein Zertikat bestehend aus p und p und q nicht eindeutig bestimmt sein müssen), gilt also ∈ N P . Es mag vielleicht überraschend sein, aber das gleiche Da für jede zusammengesetzte Zahl q existiert (wobei Composites Resultat gilt auch für das Problem Primes, wie im folgenden Satz von Pratt (1975) gezeigt wird. Satz 1.13 (Pratt). Primes Beweis. ∈ NP Zunächst wollen wir angeben, in welcher Form ein Zertikat für die Primheit einer Zahl vorliegen kann. Nach Pratt besteht ein Zertikat C(n) ◦ n für die Primheit von aus der Angabe einer Faktorisierung von n − 1: n − 1 = pe11 · pe22 · . . . · pess Dabei sind die ◦ ≥2 ganze Zahlen C(pi ) für alle pi > 2 der Angabe eines Elementes und die Exponenten p1 , . . . , p s dem Nachweis, dass die Zahlen tikate ◦ pi ei ∈ N. Primzahlen sind, indem Zer- angegeben werden. a ∈ Z∗n mit ordn a = n − 1. Die Angabe eines Zertikates impliziert also die Angabe von Zertikaten für alle Primteiler pi > 2 von n − 1, weshalb das Verikationsverfahren ei- ne rekursive Struktur aufweist. Diese Rekursion endet bei der Primzahl 2. Ein Beispiel für den Berechnungsbaum zum Beweis der Primheit von 947 ist in Figur 1.1 abgebildet. Dabei sind die Nachfolger eines Knotens Baum jeweils die unterschiedlichen Primteiler von den Klammern neben den Knoten mit mit Ordnung im m − 1. Die Angaben in ∗ sind jeweils Elemente aus Zm m − 1. Anhand eines solchen Zertikates Primheit von m>2 m n C(n) kann nach Satz 1.7 zweifelsfrei die nachgewiesen werden. Wichtig ist weiterhin, dass ein solcher Berechnungsbaum für zusammengesetzte Zahlen gar nicht konstruiert werden kann, da dann beispielsweise nach Lemma 1.6 keine Elemente der Ordnung n−1 gefunden werden können. Es kann in diesem Sinne also kein Zertikat für die Primheit einer zusammengesetzten Zahl existieren. Die Korrektheit dieses Verikationsverfahrens ist demnach klar. Nun wollen wir noch den Aufwand für die Überprüfung eines solchen Zertikates abschätzen. 8 Christian Viergutz Figur 1.1: Ein Primheitsbeweis für 947 Zunächst betrachten wir, wie viele Knoten ein Berechnungsbaum (wie in T (n) die Zahl der Knoten im Berechnungsn. Diese Gröÿe lässt P sich rekursiv wie folgt denieren: T (2) = 1 und für n ≥ 3: T (n) = 1 + p | n−1 T (p). Per Induktion zeigen wir, dass T (n) < 2 log2 n gilt. Dies ist sicherlich richtig für n = 2, weil der Figur 1.1) besitzen kann. Sei dazu baum für die Primzahl zugehörige Baum nur aus einem einzigen Knoten besteht. Sei nun angenom- p < n wahr ist. Weiterhin sei (n − 1 ist gerade für alle Primzah- men, dass die Behauptung für alle Primzahlen n − 1 = p1 p2 · . . . · pk , wobei p1 = 2 ist len ≥ 3) und die pi (nicht notwendigerweise Dann besitzt ein Baum mit Wurzelknoten n verschiedene) Primzahlen sind. 1. einen Knoten für die Wurzel 2. einen Knoten für p1 = 2 3. und Teilbäume für alle Primzahlen Also können wir für n≥3 T (n) ≤ 1 + T (2) + p > 2, die n−1 teilen. abschätzen: k X T (pi ) i=2 ≤ 2+ k X 2 log2 pi i=2 = 2 + 2 log2 n−1 2 = 2 · (1 + log2 (n − 1) − 1) < 2 log2 n Primheitszertikate und Test von Proth 9 Nun müssen wir noch überlegen, wie viel Rechenaufwand pro Knoten im Baum entsteht. Sei m ein Knoten mit Vorgänger r. Mit diesem Knoten m verknüpfen wir die Kosten zum m − 1 (die Nachfolger) wirklich m − 1 entspricht. 1. Bilden des Produkts der Faktoren von Überprüfung, ob das Produkt auch 2. Überprüfen, ob am−1 ≡ 1 (mod m) 3. Bestätigen, dass und die gilt. a(r−1)/m 6≡ 1 (mod r) für den Vorgänger r. Der erste Schritt benötigt ein quadratische Anzahl von Bitoperationen in der 2 Eingabelänge log2 n, hat also Komplexität O(log n). Die modulare Exponen3 tiation in den Schritten 2. und 3. benötigt jeweils O(log n) Operationen. Da es im Baum insgesamt O(log n) Knoten gibt, sind die resultierenden GesamtO(log4 n) Bitoperationen. kosten für die Verikation Daher ist es mit dem angegebenen Zertikat möglich, in polynomieller Zeit (in der Eingabelänge) zu verizieren, ob eine Zahl der Beweis vollständig, dass Primes ∈ N P. n prim ist. Damit ist 10 Christian Viergutz 2. Test von Proth 2.1. Einführung. In diesem Abschnitt befassen wir uns mit einem Prim- zahltest für positive, ganze Zahlen von bestimmter Form, wie in Abschnitt 1.2 bereits angesprochen. Der Test von Proth liefert eine eziente Methode, Zahs len der Form k · 2 + 1, k, s ∈ N, auf Primheit zu überprüfen und diese Eigenschaft auch zu beweisen. Dabei hängt der Test nicht davon ab, dass die gesamte Primfaktorzerlegung von n−1 bekannt sein muss, sondern nur eine teilweise Faktorisierung. 2.2. Das Pocklington-Lemma. Um den Satz, der als Grundlage für den Test von Proth dient, zu beweisen, benötigen wir das folgende Sei n − 1 = q k r, wobei q eine Primzahl ist, die kein Teiler von r ist (q /| r). Falls dann ein a existiert, für welches die Bedingungen an−1 ≡ 1 (mod n) und ggT(a(n−1)/q − 1, n) = 1 gelten, dann ergibt sich für jeden Primteiler p | n: Lemma 2.1 (Pocklington). p ≡ 1 (mod q k ) Beweis. Angenommen, a sei derart wie im Lemma beschrieben und p p. ein n. Weiterhin sei t := ordp a die Ordnung von a modulo Da a ≡ 1 (mod n) ist, muss auch an−1 ≡ 1 (mod p) gelten, weil p ein Teiler k von n ist. Daraus folgt t | n − 1 = q r , weil t die kleinste natürliche Zahl mit at ≡ 1 (mod p) ist. (n−1)/q Da a − 1 zu n teilerfremd ist, gilt auch p /| a(n−1)/q − 1 und damit a(n−1)/q 6≡ 1 (mod p). Weiterhin gibt es ein `, so dass ` · t = q k r gilt (wegen t | n − 1) und deshalb q k | ` · t. Es ist t = ordp a = q j s für ein j ≤ k und ein s | r. Angenommen j < k , dann ist q j s ein Teiler von q k−1 r und wir erhalten: Primteiler von n−1 a(n−1)/q = a(q was im Widerspruch zu ggT(a = aq k−1 r ≡ 1 (mod p), (n−1)/q gemeinsamer Teiler wäre. Also wissen wir, dass k r)/q − 1, n) = 1 steht, da p in diesem Fall ein k folgt j = k und somit q | t. Darüberhinaus t | p − 1, weil die Ordnung jedes Elementes einer Gruppe ∗ Zp = p − 1 gilt. Mit der Transitivität der k k Teiler-Beziehung folgt wie behauptet: q | p − 1 ⇔ p ≡ 1 (mod q ). die Gruppenordnung teilt und √ Sei n − 1 = m · r, wobei m > n − 1 und ggT(m, r) = 1. Falls ein a existiert mit an−1 ≡ 1 (mod n) und ggT(a(n−1)/q − 1, n) = 1 für jeden Primteiler q | m, dann ist n eine Primzahl. Korollar 2.2. Primheitszertikate und Test von Proth 11 Angenommen n sei zusammengesetzt und p sei der kleinste Prim√ faktor von n. Wir wissen: p ≤ n. Aus Lemma 2.1 folgt, dass p ≡ 1 (mod q k ) k für alle q | m. Durch den Chinesischen Restsatz erhalten wir p ≡ 1 (mod m). Beweis. Deshalb gilt p≥m+1 und damit p> √ n. Widerspruch! √ n = 281, also n − 1 = 280 = 35 · 8, wobei 281 − 1 ≈ 16 < 35 und ggT(35, 8) = 1 ist. Für a = 2 gilt 2280 ≡ 1 (mod 281) und 280/7 ggT(2 − 1, 281) = 1 = ggT(2280/5 − 1, 281). Nach Korollar 2.2 ist 281 damit prim. ♦ Beispiel 2.3. Sei 2.3. Satz von Proth. Sei n = k · 2s + 1 mit 1 ≤ k < 2s . Dann sind die folgenden Aussagen äquivalent: Satz 2.4 (Test von Proth). (i) n ist eine Primzahl (ii) ∃ a ∈ Z : a(n−1)/2 ≡ −1 (mod n) Beweis. (ii)⇒(i): Sei a∈Z wie in (ii) angegeben. Dann gilt für dieses a n−1 ≡ 1 (mod n) (durch Quadrieren), wie in Korollar 2.2 vorausgesetzt. √ s s Weiterhin gilt n − 1 = k · 2 und 2 > n − 1 und ggT(k, 2s ) = 1, da o.B.d.A. s ein eventueller Faktor 2 von k schon in 2 integriert wäre. s Da der einzige Primteiler von 2 die Zahl 2 selbst ist, müssen wir noch (n−1)/2 überprüfen, ob ggT(a − 1, n) = 1 gilt. Nach Voraussetzung wissen wir: n | a(n−1)/2 + 1. Wegen ggT(x, y) = ggT(x, y mod x) können wir schlieÿen: (n−1)/2 ggT a − 1, n = ggT n, a(n−1)/2 − 1 mod n = ggT(n, −2) = 1 (wegen n ungerade) auch a Aus Korollar 2.2 erhält man dann mit den genannten Voraussetzungen, dass n prim ist. (i)⇒(ii): Da n eine Primzahl ist, gilt nach dem kleinen Satz von Fermat: an−1 ≡ 1 (mod n) für alle zu n teilerfremden ganzen Zahlen a. Insbesondere ∗ gibt es für eine Primzahl n stets eine Primitivwurzel g , d.h. < g >= Zn und n−1 ordn (g) = n − 1. Aus g ≡ 1 (mod n) und n prim folgt i.A., dass 1 nur die Wurzeln 1 oder −1 besitzen kann: g (n−1)/2 ≡ 1 (mod n) Da g aber Z∗n ∨ g (n−1)/2 ≡ −1 (mod n) erzeugt und die Ordnung nicht eintreten, da sonst n−1 n−1 besitzt, kann der linke Fall den Exponenten (n − 1)/2 teilte, was ein 12 Christian Viergutz Widerspruch ist. Daher folgt ∃ a ∈ Z : a(n−1)/2 ≡ −1 (mod n) n = 41 = 5 · 23 + 1. Um zu Satz 2.4 nun ein a nden mit Beispiel 2.5. Gegeben sei prim ist, müssen wir nach und damit ist auch die zweite Beweisrichtung gezeigt. beweisen, dass 41 a(n−1)/2 ≡ −1 (mod 41) ⇔ a20 ≡ 40 (mod 41) a = 2 erhalten wir 220 ≡ 1 (mod 41), aber schon für a = 3 gilt 320 ≡ 40 (mod 41), womit der Test von Proth n = 41 als Primzahl bestätigt. ♦ Für Literatur & (1996). Algorithmic Number Theory, Vol.1: Ecient Algorithms. MIT Press, Cambridge MA. (1975). Every prime has a succinct certicate. SIAM Journal on Computing , 214220. (1980). Probabilistic Algorithms for Testing Primality. Journal of Number Theory , 128138. & (1977). A fast Monte-Carlo test for primality. SIAM Journal on Computing (1), 8485. Erratum in (1978), p. 118. Eric Bach Jeffrey Shallit V. Pratt 4 Michael O. Rabin 12 R. Solovay V. Strassen 6 Christian Viergutz Eringerfelder Straÿe 21 33142 Büren-Steinhausen [email protected] 7