Das quadratische Sieb Eine Einführung Version 1.02 Stephan H Hoffmann 2015-01-02 Zusammenfassung Das quadratische Sieb ist ein Verfahren zur Zerlegung einer Zahl in ihre Faktoren. Inhaltsverzeichnis 1 Einleitung 1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 2 2 Verfahren von Fermat 2 3 Quadratische Reste 3 4 Das 4.1 4.2 4.3 4.4 quadratische Sieb Grundidee . . . . . . . . . . . . . . . . . . . . . . . Sieben . . . . . . . . . . . . . . . . . . . . . . . . . Der Exponentenvector und die Exponentenmatrix . Vollständige Beschreibung des Algorithmus . . . . . . . . 4 4 5 6 7 5 Einfache Verbesserungen 5.1 Verdoppelung des Siebintervals . . . . . . . . . . . . . . . . . . . . . 5.2 Sieben statt Dividieren . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 8 6 Anhang 6.1 Bestimmung der Schranke S . . . . 6.2 Bestimmung des Siebintervalls L . 6.3 Nochmals: quadratische Reste . . . 6.4 Bemerkungen zur Implementierung 6.5 Anmerkungen zur Literatur . . . . Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 9 9 9 9 10 11 1 1 1.1 Einleitung Motivation Früher war das Zerlegen einer Zahl in ihre Primfaktoren nur von theoretischem Interesse. Viele Verschlüsselungsverfahren basieren darauf, dass es einfach ist, zwei große Primzahlen miteinander zu multiplizieren, dass es aber praktisch unmöglich ist, aus dem Produkt n die Primfaktoren zu errechnen, wenn die Primfaktoren und damit n nur groß genug wählt. Da solche Verschlüsselungsverfahren inzwischen weit verbreitet sind, gibt es auch ein praktisches Interesse an der Faktorisierung von großen ganzen Zahlen. Derzeit gelten Zahlen mit 2048 Bits als groß genug für eine sichere Verschlüsselung. Bisher ist es nicht gelungen zu beweisen, dass die Faktorisierung großer Zahlen schwierig ist. Es ist unwahrscheinlich, aber möglich, dass morgen ein Verfahren entdeckt wird, dass die Faktorisierung noch viel größerer Zahlen mit heutigen Rechnern möglich macht. Wie findet man nun die oben erwähnten großen Primzahlen? Hierzu gibt es Algorithmen, die recht schnell zeigen können, ob eine Zahl zusammengesetzt oder Prim ist. Der Miller-Rabin-Test ist vielleicht das bekannteste Verfahren. 1.2 Überblick Das quadratische Sieb ist eine Weiterentwicklung des Verfahrens von Fermat, das im nächsten Abschnitt vorgestellt wird. Nach einem kurzen Exkurs über quadratische Reste wenden wir uns dem quadratischen Sieb selbst zu. Im Anhang werden Werte für einige Parameter des quadratischen Siebs sowie weitere Einzelheiten zu quadratischen Resten angegeben. 2 Verfahren von Fermat Sei n die zu zerlegende Zahl. Wenn man n als Differenz zweier Quadrate x2 − y 2 darstellen kann, findet man mit Hilfe der dritten binomischen Formel zwei Faktoren von n: x2 − y 2 = n ⇐⇒ (x + y)(x − y) = n (1) √ Man berechnet nun ausgehend von x = b nc sukzessive die Quadrate der Zahlen (x + 1), (x + 2), . . . und zieht davon n ab, bis man als Ergebnis wieder ein Quadrat erhält. Beispiel 1: n = 253 √ x = b 253c = 15 (x + 1)2 (x + 2)2 = 162 = 172 = 256 ≡ 3 mod 253 = 289 ≡ 36 mod 253 (2) Da 36 = 62 sind wir bereits fertig und die Teiler sind 17 + 6 = 23 und 17 − 6 = 11. Beispiel 2: n = 21311 2 √ x = b 21311c = 145 (x + 1)2 (x + 2)2 (x + 3)2 (x + 4)2 (x + 5)2 (x + 6)2 (x + 7)2 (x + 8)2 (x + 9)2 (x + 10)2 (x + 11)2 = 1462 = 1472 = 1482 = 1492 = 1502 = 1512 = 1522 = 1532 = 1542 = 1552 = 1562 ≡ 5 mod 21311 ≡ 298 mod 21311 ≡ 593 mod 21311 ≡ 890 mod 21311 ≡ 1189 mod 21311 ≡ 1490 mod 21311 ≡ 1793 mod 21311 ≡ 2098 mod 21311 ≡ 2405 mod 21311 ≡ 2714 mod 21311 ≡ 3025 mod 21311 (3) Da 3025 = 552 sind wir fertig und die Teiler sind 156+55 = 211 und 156−55 = 101. Nicht erklärt wurde bisher, wie man denn merkt, dass auf der rechten Seite eine Quadratzahl steht. Dazu gibt es eine praktikable und eine eher theoretische Möglichkeiten: √ • Man berechnet die Wurzel x = b nc und prüft, ob das Quadrat x2 dieser Wurzel wieder n ergibt. Die Quadratwurzel kann man relativ effizient mit Hilfe des Newtonschen Näherungsverfahren bestimmen. • Man zerlegt die Zahl in ihre Primfaktoren und prüft, ob die Faktoren jeweils doppelt (oder vierfach oder allgemeint 2k-fach) auftreten. Da die Zahlen auf der rechten Seite der Kongruenz kleiner sind als die zu faktorisierende Zahl n ist dies leichter als die Faktorisierung von n selbst. Es ist jedoch viel rechenintensiver als die Berechung der Wurzel und hier nur erwähnt, weil eine Abwandlung davon beim quadratischen Sieb angewendet wird. 3 Quadratische Reste Da wir die sogenannten quadratischen Reste auch später noch brauchen, sei hier kurz ein Trick erläutert, mit dem man bei vielen Zahlen ohne Rechenaufwand sagen kann, dass sie keine Quadratzahlen sind. Schauen wir uns hierzu die Quadrate der Zahlen von 1 bis 10 an: 1, 4, 9, 25, 36, 49, 64, 81, 100. Als letzte Ziffer kommen nur die Zahlen 0, 1, 4, 5, 6, 9 vor, 2, 3, 7, 8 kommen nicht vor. Da Zahlen größer 10 von der Form k · 10 + i und ihre Quadrate von der Form k 2 · 100 + 2ki · 10 + i2 ≡ i2 mod 10 sind, haben wir bereits alle Endziffern gefunden. Man kann also im Mittel bei 4 von 10 Zahlen ohne Rechenaufwand feststellen, dass sie keine Quadrate sind. Diese Überlegungen führen zu folgender Definition: Seien a, m ∈ N teilerfremd. a heißt quadratischer Rest modulo m, wenn es ein x ∈ N gibt, so dass x2 ≡ a mod m (4) gilt. Alle anderen Zahlen a heißen quadratische Nichtreste. Die Zahl 0 wird weder zu den Resten noch zu den Nichtresten gezählt. Zahlen, die nicht teilerfremd zu m sind, werden nicht klassifiziert. Weitere Informationen zu quadratischen Resten findet sich in Abschnitt 6.3 3 4 Das quadratische Sieb Als es von Pomerance Anfang der 80er Jahre entwickelt wurde, war es das schnellste Faktorisierungsverfahren für große Zahlen. 1994 wurde damit eine Zahl mit 129 Dezimalstellen in ihre Primfaktoren zerlegt. Martin Gardner hatte Mitte der 70er Jahre vermutet, dass es in den nächsten 1015 Jahren unmöglich ist, so große Zahlen zu faktorisieren. Im nächsten Abschnitt wird die Grundidee des Verfahrens dargestellt. Die zwei darauffolgenden Abschnitte beschreiben die zwei Schritte des Verfahrens: Im ersten Schritt werden Zahlen gesucht, deren Quadrate modulo der zu faktorisierenden Zahl n nur kleine Primfaktoren enthalten. Das ist der sogenannte Siebschritt. Im zweiten Schritt wird geprüft, ob man die so gefundenen Zahlen so kombinieren kann, dass das Quadrat der Produkte modulo n ebenfalls ein Quadrat ist. Dazu muss ein homogenes lineares Gleichungssystem gelöst werden. 4.1 Grundidee Die Grundidee des quadratischen Siebs ist es, statt nur nach Zahlen zu suchen, die x2 − y 2 = n efüllen, auch Vielfache von n zuzulassen. Man sucht also nach Zahlen x und y, für die folgendes gilt: x2 − y 2 = k · n, k∈N ⇐⇒ x2 ≡ y 2 mod n (5) Hat man ein solches Zahlenpaar gefunden dann kann man über gcd(x − y, n) gcd(x + y, n) (6) zwei Teiler von n bestimmen. Wenn man Pech hat, findet man allerdings nur die trivialen Teiler 1 und/oder n. Dann muss man ein weiteres Paar x, y suchen. Man kann zeigen, dass man im Mittel bei jedem zweiten Paar Pech hat. gcd bezeichnet hierbei den größten gemeinsamen Teiler (greatest common divisor). Zur Berechnung des gcd verwendet man das Verfahren von Euklid. Wie beim Verfahren von√Fermat berechnet man der Reihe nach die quadratischen Reste der Zahlen xi = b nc + i, i = 1, 2, . . .: √ (7) q(x) = x2i = (b nc + i)2 ≡ zi mod n Man sucht nun aber nicht nur nach Quadraten, sondern auch nach Kombinationen von Zahlen xi , xj , xk , . . ., so dass die rechte Seite ein Quadrat ergibt: x2i · x2j · x2k . . . = (xi · xj · xk . . .)2 ≡ zi · zj · zk . . . mod n ≡ y 2 mod n (8) Anhand eines Beispiels wird das hoffentlich klarer. Sei n = 1649. 412 = 1681 ≡ 32 mod 1649 422 = 1764 ≡ 115 mod 1649 432 = 1849 ≡ 200 mod 1649 ≡ 25 mod 1649 ≡ 3 · 5 · 23 mod 1649 ≡ 23 · 52 mod 1649 (9) Anhand der Primfaktorzerlegung kann man erkennen, dass der quadratische Rest des Produktes 41 · 43, also 32 · 200, ein Quadrat ist: (41 · 43)2 = 17632 ≡ 32 · 200 ≡ 6400 ≡ 802 mod 1649 (10) Mit gcd(1763 + 80, 1649) = 97 und gcd(1763 − 80, 1649) = 17 erhält man die gesuchten Faktoren. 4 Das “quadratisch” im Namen des Verfahrens kommt von den quadratischen Ausdrücken q(x) in Gl. (7). Leider ist außer dem ersten Teil des Namens noch fast nichts klar. Zwar ist einzusehen, dass man auf diese Art Faktoren finden kann, aber es ist noch völlig unklar, wie man eine geeignete Kombination der xi findet oder wieso ein Verfahren, bei dem sehr viele Zahlen in Primfaktoren zerlegt werden müssen, schnell sein kann. Wir wenden uns der zweiten Frage zuerst zu und kommen damit zum Sieben. 4.2 Sieben Wenn n sehr groß ist, dann werden auch die quadratischen Reste zi sehr groß und ihre Zerlegung in Primfaktoren sehr rechenaufwändig. Es zwingt uns jedoch keiner, alle Reste zi zu zerlegen. Wir wählen eine Schranke S und bestimmen zunächst alle Primzahlen unterhalb dieser Schranke. Dann prüfen wir, ob sich zi mit diesen Primzahlen vollständig faktorisieren läßt. Wenn ja, merken wir uns xi , zi und die Primfaktorzerlegung. Wenn nicht, wenden wir uns einfach der nächsten Zahl xi und ihrem quadratischen Rest zi zu. Ein Paar geeigneter Zahlen xi , zi wird Relation genannt. Auf diese Art sieben wir unter allen betrachteten xi geeigneten Zahlen (Relationen) aus. Beispiel: n = 120793 Wir √ wählen S = 14. Die Primzahlen sind also 2, 3, 5, 7, 11 und 13. Ferner ist 346 = b 120793c. In der folgenden Tabelle sind nicht mehr alle xi aufgeführt: 3482 3492 3502 3512 .. . 2 357 3582 3632 3712 ≡ 311 ≡ 1008 ≡ 1707 ≡ 2408 . ≡ .. ≡ 6656 ≡ 7371 ≡ 10976 ≡ 16848 ≡ 311 ≡ 24 · 32 · 7 ≡ 3 · 569 ≡ 23 · 7 · 43 .. ≡ . 9 ≡ 2 · 13 ≡ 34 · 7 · 13 ≡ 25 · 73 ≡ 24 · 34 · 13 mod mod mod mod 120793 120793 120793 120793 (11) mod mod mod mod 120793 120793 120793 120793 Man kann nun leicht nachrechnen, dass (357 · 358 · 363)2 ≡ 6656 · 7371 · 10976 ≡ (27 · 32 · 72 · 13)2 mod 120793 (12) gilt. Mit 357 · 358 · 363 ≡ 9066 und 6656 · 7371 · 10796 = 538497662976 ≡ 53116 ergibt sich gcd(9066 + 53116, 120793) = 1 (13) gcd(53116 − 9066, 120793) = 1 Pech! Also auf zur nächsten Kombination: Mit 349 · 358 · 371 = 46353482 ≡ 89763 und 1008 · 7371 · 16848 = (24 · 35 · 7 · 13)2 = 3538082 = 1122222 erhalten wir gcd(112222 + 89763, 120793) = gcd(201985, 120793) = 199 gcd(112222 − 89763, 120793) = gcd(22459, 120793) = 607 (14) Im zweiten Anlauf haben wir somit die Faktoren 199 und 607 gefunden. Wenn wir uns die Primzahlen in Gl. (11) anschauen, fällt auf, dass 5 und 11 nicht vorkommen. Das ist kein Zufall, was man wie folgt sieht: Die Zahlen q(x), die wir betrachten, liegen zwischen n und 2n (das Siebinterval ist klein genug im Vergleich zu n, siehe auch Abschnitt 6.2). Damit ist z = q(x) mod n = q(x) − n. Damit eine Primzahl p Teiler von q(x) − n ist, muss gelten: p|(q(x) − n) ⇐⇒ q(x) − n ≡ 0 mod p 5 ⇐⇒ q(x) ≡ n mod p (15) Das heisst aber nichts anderes, als dass n ein quadratischer Rest von p sein muss! Bei gegebener Primzahl p läßt sich leicht bestimmen, ob n ein quadratischer Rest modulo dieser Primzahl p ist. Siehe Abschnitt 6.3. Von den Primzahlen < S können wir also nochmals einige aussortieren. Die Primzahlen, die dann noch übrig bleiben, werden als Faktorbasis bezeichnet. Modulo 2 ist jede ungerade Zahl quadratischer Rest. 2 gehört daher stets zur Faktorbasis. Es fehlt noch ein letzter wichtiger Teil des Verfahrens: Wie bestimmt man die geeigneten xi , die zu multiplizieren sind, damit das Produkt der zugehörigen quadratischen Reste ein Quadrat wird? Es stellt sich heraus, dass man dazu ein homogenes lineares Gleichungssystem lösen muss, in dem alle Koeffizienten und Unbekannten nur die Werte 0 oder 1 haben können. 4.3 Der Exponentenvector und die Exponentenmatrix Jede Zahl m läßt sich als Produkt geeigneter Primzahlen pi darstellen: αk α2 1 m = pα 1 · p2 . . . pk , mit αi = 0, 1, 2, . . . (16) Der durch die Exponenten αi gegebene Vector ~b = (α1 , α2 , . . . αk ) heißt Exponentenvector der Zahl m. Hierbei berücksichtigen wir nur die Primzahlen in der Faktorbasis. Beispiel: Die Zahl 357 = 29 · 13 = 29 · 30 · 70 · 13 hat den Exponentenvector ~ = (9, 0, 0, 1). b357 Multipliziert man zwei Zahlen m1 und m2 , so ergibt sich der Exponentenvektor des Produktes als Summe der Exponentenvektoren von m1 und m2 . Eine Zahl ist genau dann eine Quadratzahl, wenn ihr Exponentenvector nur gerade Koeffizienten (oder 0) hat. Um nun ein Quadrat zu finden, muss man die xi so kombinieren, dass die Summe ihrer Exponentenvektoren nur gerade Zahlen enthält. Da es auf die absoluten Werte der Exponenten nicht ankommt, sondern nur darauf, ob sie gerade oder ungerade sind, rechnet man mit den Exponenten modulo 2. Für jede Zahl xi müssen wir entscheiden, ob sie im Produkt verwendet wird oder nicht. Wir müssen also eine Linearkombination von Exponentenvektoren finden, deren Summe modulo 2 nur Nullen enthält. Das ist aber nichts anderes als das Lösen eines homogenen, linearen Gleichungssystems. Diese Gleichungssystem können wir in Matrixform schreiben: A · ~v = ~0 (17) Dabei hat die Matrix A so viele Spalten, wie es geeignete Zahlen xi gibt und so viele Zeilen, wie es Primzahlen in der Faktorbasis gibt. Ist A eine r × c-Matrix, gilt also: • r ist die Zahl der Primfaktoren in der Faktorbasis. Der Nullvektor auf der rechten Seite der Gleichung hat ebenfalls r Elemente. • c ist die Zahl geeigneter xi . Der gesuchte Lösungsvektor ~v hat ebenfalls c Elemente. Aus der linearen Algebra wissen wir, dass ein homogenes Gleichungssystem entweder gar keine Lösung hat oder der Lösungsraum die Dimension c − rank A hat. (Dabei bezeichnet rank A den Rang der Matrix A. Der Rang einer r × c-Matrix beträgt höchstens min(r, c). Wenn wir also mehr xi finden, als es Elemente in der Faktorbasis gibt, gibt es auf jeden Fall eine Lösung. 6 Rechnet man mit ’normalen’ Zahlen, gibt es für jede Dimension des Lösungsraumes unendlich viele Lösungen, die Vielfachen eines der Lösungsvektoren. Da wir hier nur mit 0 und 1 rechnen, gibt es zu jeder Dimension genau eine Lösung. Im Beispiel mit n = 120793 erhalten wir folgende Tabelle mit Exponenten: 13 0 1 1 0 1 (18) 7 1 0 1 1 0 13 0 1 1 0 1 (19) Daraus wiederum ergibt sich folgende Matrix 0 0 1 1 0 0 A† = 0 0 1 1 0 1 0 0 0 0 1 1 0 1 349 357 358 363 371 2 4 9 0 5 4 3 2 0 4 0 4 7 1 0 1 3 0 Modulo 2 ergibt sich daraus folgende Tabelle: 349 357 358 363 371 2 0 1 0 1 0 3 0 0 0 0 0 (20) Man beachte, dass die angegebene Matrix die Transponierte der in Gl. (17) verwendeten Matrix ist. Zur Lösung des Gleichungssystems kann man das Gaußsche Eliminationsverfahren anwenden. Mit Rundungsfehlern hat man nicht zu kämpfen, da nur die Werte 0 und 1 auftreten. Es gibt spezialisierte Verfahren zum Lösen von unterbestimmten Gleichungssystemen und noch weiter spezialisierte Lösungsverfahren für Rechnungen modulo 2. Im folgenden fassen wir alle Schritte des Verfahrens zusammen. 4.4 Vollständige Beschreibung des Algorithmus Sei n die zu zerlegende Zahl. √ 1. Berechne x0 = b nc. 2. Wähle eine Schwelle S für die Primzahlen und ein Schranke L für die zu siebenden Zahlen. Siehe Abschnitte 6.1 und 6.2 für empfohlene Werte. 3. Berechne alle Primzahlen kleiner als S, zum Beispiel mit dem Sieb des Eratosthenes. 4. Prüfe für jede Primzahl p < S, ob n ein quadratischer Rest modulo p ist (Abschnitt 6.3 erklärt, wie man das macht). Wenn ja, wird die Primzahl Teil der Faktorbasis. Dieser Schritt ist nicht zwingend notwendig, man erspart sich damit jedoch enormen Rechenaufwand. 7 5. Siebe: Für alle i = 1...L berechne x2i = (x0 + i)2 , zi und versuche, den Rest zi zu faktorisieren. Wenn dies gelingt, dann merke Dir xi , zi und die Primfaktorzerlegung. Dieser Teil ist der mit Abstand rechenintensivste. Er läßt sich gut parallelisieren. 6. Bestimme die Exponentenmatrix und löse das lineare Gleichungssystem. Dieser Schritt ist nicht so rechenintensiv, aber er läßt sich nicht gut parallelisieren. 7. Prüfe, ob einer der Lösungsvektoren zu einer nichttrivialen Lösung führt. Falls nein, kann man das Siebinterval vergrößern. Führt das nicht zum Erfolg, muss man die Faktorbasis vergrößern. 5 5.1 Einfache Verbesserungen Verdoppelung des Siebintervals Um möglichst viele möglichst √ kleine quadratischen Reste zu erhalten, siebt man auch Zahlen kleiner x0 = b nc, d.h. man berechnet die Zahlen zi = n − (x0 − i)2 mit i = 1, 2, ...L (21) Diese zi versucht man wie oben beschrieben in Primfaktoren zu zerlegen, muß sich allerdings zusätzlich merken, dass sie kleiner oder gleich x0 sind. Das macht man, indem man −1 der Faktorbasis hinzufügt und sich −1 als Faktor für alle xi ≤ x0 merkt. Man kann dann mit Zahlen 2L + 1 Zahlen xi , i ∈ [−L, L] sieben. 5.2 Sieben statt Dividieren Beim Sieben werden sehr viele Zahlen probeweise durch Primzahlen dividiert. Das kann man sich fast vollständig sparen, indem man nochmals einen Siebtrick anwendet! Man geht hier ähnlich wie beim Sieb des Eratosthenes vor, nur dass man diesmal nicht an den Primzahlen interessiert ist, sondern an den ausgesiebten Zahlen: Beginnend mit der Zahl 2 merkt man sich bei jeder zweiten Zahl, dass sie durch 2 teilbar ist. Mit der nächsten Primzahl, also 3, verfährt man genauso: man merkt sich bei jeder dritten Zahl, dass sie durch 3 teilbar ist. Und so weiter . . . Bei den quadratischen Resten zi ist es etwas komplizierter. Die quadratische Gleichung q(x) ≡ 0 mod p hat für p > 2 zwei Lösungen xi1 und xi2 . Für p = 2 gibt es nur eine Lösung. Ferner gilt: Ist z = q(x) = x2 − n = (x0 + i)2 − n durch eine Primzahl p teilbar, so ist z̃ = q(z + p) = (x + p)2 − n = (x2 + 2px + p2 ) − n (22) mit Sicherheit auch durch p teilbar. Wenn wir also die beiden Lösungen xi1 und xi2 kennen, wissen wir dass alle xl = xi1 +jp und xk = xi2 +jp mit j = 0, 1, 2 . . . ebenfalls Lösungen sind. Wichtiger: wir wissen, welche zi nicht durch p teilbar sind und müssen die Division erst gar nicht probieren! Wie finden wir nun die Lösungen xi1 und xi2 ? Dazu gibt es zwei Möglichkeiten: Man löst die quadratische Gleichung oder man probiert einfach die Zahlen zi der Reihe nach durch. Wenn pmax die größte Primzahl in der Faktorbasis ist, muss man maximal pmax Zahlen prüfen, um die zwei Lösungen für alle p der Faktorbasis zu finden! 8 Ist ein Rest zi durch p teilbar, so müssen wir die Division durchführen, da wir nicht wissen, wie oft zi durch p teilbar ist oder ob nach Division mit allen Primteilern der Faktorbasis noch ein Rest bleibt. Trotzdem erfordert dieses Verfahren signifikant weniger Divisionen: Jede zweite Zahl müssen wir nicht durch 2 teilen, jede dritte nicht durch 3, nur 2 von 5 durch 5, und so weiter. 6 6.1 Anhang Bestimmung der Schranke S Je größer man die Schranke S wählt, desto mehr quadratische Reste haben nur Primzahlen kleiner S als Faktoren. Allerdings braucht man dann auch mehr Zahlenpaar xi , zi um eine geeignete Linearkombination zu finden. Man kann zeigen, dass der optimale Wert ungefähr bei q √ (23) S = exp ln n · ln ln n liegt. Für n = 120793 erhält man S = 14, für n = M (101) = 2101 − 1 = 2535301200456458802993406410751 erhält man 5558. Es gibt 733 Primzahlen kleiner als 5558 und M(101) is ein quadratischer Rest von 364 davon. 6.2 Bestimmung des Siebintervalls L Das Siebintervall wird oft zu L = S 2 gewählt. Für M (101) erhält man L = 30 891 364. Wir hatten Gl. (??) unter der√Annahme q(x) < 2n abgeleitet. Mit Siebinterval L beträgt der Maximalwert (b nc + L)2 . Diese Werte sind in der nachfolgenden Tabelle für einige Werte von n aufgeführt: √ n S L (b nc + L)2 102 3 9 361 103 6 36 4489 104 9 81 32761 (24) 105 14 196 262144 6 10 20 400 1960000 109 52 2704 1178274276 1012 120 14400 1029007360000 Man sieht deutlich, dass die Bedingung erst ab cirka n > 106 erfüllt ist. Für so kleine Zahlen wird man aber nie das quadratische Sieb verwenden. 6.3 Nochmals: quadratische Reste Für jede Zahl z teilerfremd zu einer Primzahl p gilt nach dem kleinen Fermatschen Satz: np−1 ≡ 1 mod p. Ist nun n quadratischer Rest modulo p, dann gibt es eine Zahl y, so dass n ≡ y 2 mod p. Für y gilt y p−1 ≡ 1 mod p und mit y 2 ≡ n folgt daraus n(p−1)/2 ≡ 1 mod p. 6.4 Bemerkungen zur Implementierung Mein Siebprogramm ist in C++ geschrieben und verwendet die Bibliothek boost::multiprecision (siehe www.boost.org). 9 Die in Abschnitt 5.2 vorgestellte Optimierung, ist noch nicht implementiert. Ohne diese Optimierung braucht das Programm auf meinem Rechner mit einer bis zu 3.8GHz schnellen CPU 11 Minuten zur Faktorisierung der 101-ten Mersenne-Zahl M (101). Die Faktorbasis enthielt 315 Primzahlen und 20 Millionen Zahlen wurden gesiebt. Von den 315 Primzahlen kommen 27 gar nicht oder nur ungerade Anzahl oft in nur einer Relation vor, so dass noch 288 übrig bleiben. Das Programm fand 313 Relationen, von denen nach Aussortieren der Relationen mit den oben erwähnten 27 Primzahlen noch 291 übrig blieben. Das Gleichungssystem bestand also aus 288 Gleichungen und 291 unbekannten. Gauß-Elimination lieferte 5 Lösungen, die dritte davon lieferte die Faktoren. 138 der 291 Relationen waren an der Lösung beteiligt (d.h. 138 Zahlen xi und 138 Zahlen yi wurden multipliziert). 6.5 Anmerkungen zur Literatur Im Internet findet man mehr zu Faktorisierungsverfahren, als man je lesen kann. [1] bis [7] ist eine Auswahl. Beim Verständnis des quadratischen Siebes haben mir besonders [2], [3] und [5] geholfen. [8] ist ein wirklich für Anfänger geeignetes Buch. Ziel des Buches ist es, das erst vor wenigen Jahren entdeckte AKS Primzahltestverfahren verständlich darzustellen. Auch das Miller-Rabin-Verfahren wird erklärt. Ich bin noch nicht bis zum Ende durchgedrungen. [9] ist deutlich anspruchsvoller. Die notwendigen mathematischen Sätze werden angeführt, aber nur teilweise bewiesen. Ich stecke noch in der ersten Hälfte fest. [10] bis [13] sind populärwissenschaftliche Bücher zur Zahlentheorie oder Teilgebieten davon. Ich habe nur einen Teil davon gelesen. [14] stellt die Teilgebiete der Mathematik vor, die beim Beweis des großen fermatschen Satzes verwendet wurden. [15] und [16] sind nicht populärwissenschaftlich. Letzteres erwarb ich, weil darin ein Verfahren zur Division großer Zahlen erklärt wird. Ein wichtiges Detail dazu habe ich sonst noch nirgends gefunden. Literatur [1] Carl Pomerance, A Tale of Two Sieves, PDF, Internet [2] Carl Pomerance, Smooth numbers and the quadratic sieve, PDF, Internet [3] Eric Landquist The Quadratic Sieve Factoring Algorithm, PDF, Internet [4] Christ, Dietl, Weinhandl, Implementierung des Quadratischen Siebs in dem Computeralgebrasystem Sage, PDF, Internet [5] ?, Factorization of n = 87463 with the Quadratic Sieve, PDF, Internet [6] Ralph-Hardo Schulz und Helmut Witten, Faktorisieren mit dem Quadratischen Sieb, PDF, Internet [7] Matroids Matheplanet, Faktorisierungsverfahren, http://www.matheplanet.com [8] Lasse Rempe-Gillen and Rebecca Waldecker, Primality Testing for Beginners, Student Mathematical Library der AMS, Volume 70 10 [9] Samuel S. Wagstaff, Jr The Joy of Factoring, Student Mathematical Library der AMS, Volume 48 [10] Oystein Ore Number Theory and Its History [11] Albert H. Beiler RECREATIONS IN THE THEORY OF NUMBERS THE QUEEN OF MATHEMATICS ENTERTAINS [12] Marcus du Sautoy, The Music of the Primes, HarperCollins [13] John Derbyshire, Prime Obsession, A Plume Book [14] Avner Ash und Robert Gross, Fearless Symmetry, Princeton University Press [15] Friedrich Ischebeck Einladung zur Zahlentheorie [16] Harald Scheid und Andreas Frommer, Zahlentheorie, Springer Spektrum, 4. Auflage 11 Index binomische Formel, 2 Euklid, Verfahren von, 4 Faktorbasis, 6 gcd, 4 größter gemeinsamer Teiler, 4 Newtonsches Näherungsverfahren, 3 Pomerance, 4 Relation, 5 Sieb, 5 Verfahren von Euklid, 4 12