Das quadratische Sieb Eine Einführung

Werbung
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
Herunterladen