Gegeben sei eine beliebige ganze Zahl n > 1. Ein

Werbung
Das quadratische Sieb (QS)
Paul Breiding, 12.6.2012
Gegeben sei eine beliebige ganze Zahl n > 1. Ein subexponentielles Verfahren zum Faktorisieren von n ist das quadratische Sieb (siehe [1, S. 261ff]).
- Falls n gerade ist, ist 2 ein Faktor von n
- Prüfe via Newton-Algorithmus, ob bn1/k ck = n für 1 < k ≤ log n.
Wir können nach diesen zwei Überprüfungen annehmen, dass n eine
Q ungerade Zahl und
keine Potenz ist. Angenommen n habe k Primfaktoren. Etwa n = ki=1 pei i .
e
Z/nZ ∼
= Z/pe11 Z × . . . × Z/pkk Z,
nach CRT
Und Z/pei i Z ist für alle i zyklisch (für einen Beweis siehe [2, S. 53f]). Die Quadratwurzeln
von 1 mod n haben daher alle die Form (±1, . . . , ±1). Es folgt, dass es exakt 2k Quadratwurzeln mod n gibt. Diese können wir dazu verwenden, mögliche Teiler von n zu finden:
Sei etwa a2 ≡ 1 mod n und a 6≡ ±1 mod n. Wegen n | (a − 1)(a + 1) = a2 − 1, aber
n - (a − 1), (a + 1), muss ggT(a − 1,n) ein echter Teiler von n sein.
Eine äquivalente Aufgabe ist, x, y mit
ggT(xy, n) = 1,
x 6≡ ±y
mod n
und x2 ≡ y 2
mod n
zu finden. Denn dann gilt (xy −1 )2 ≡ 1 mod n.
√
Der QS-Algorithmus berechnet für ausreichend viele
x
≥
d
ne das Quadrat x2i ≡ ai
i
Q
mod nQund wählt eine Teilmenge S der ai , sodass ai ∈S ai ein Quadrat mod n ist. Falls
y 2 = ai , aber y ≡ ±x, wird y verworfen. Falls y 6≡ ±x, kann damit ein Faktor von n
gefunden werden. Induktiv lässt sich n faktorisieren. Dieses Vorgehen suggeriert einen randomisierten Algorithmus, doch er ist deterministisch. Tatsächlich liefert etwa jedes zweite
Quadrat eine nichttriviale Faktorisierung von n.
Die Probleme die zunächst auftreten sind:
a) Wie findet man eine solche Teilmenge S?
b) Wie viele Quadrate muss man berechnen, damit eine solche Teilmenge S mit Sicherheit existiert bzw. existiert sie überhaupt?
Um diese Fragen zu beantworten, benötigen wir zunächst eine Definition.
1
Definition. Sei B > 1. Eine ganze Zahl y heißt B-glatt, falls sie keine Primfaktoren,
welche größer als B sind, besitzt.
Qπ(n)
Beobachtung. Sei m eine B-glatte Zahl. m = i=1 pei i , wobei p1 , . . . , pπ(B) die Primzahlen bis B sind. Sei zudem
v(m) = (e1 , . . . , eπ(B) )
der Exponentvektor. Falls m1 , . . . , ml B-glatt sind, gilt
Y
X
π(B)
mi ist ein Quadrat ⇔
v(mi ) = 0 ∈ F2
Die Suche nach ausreichenden Zahlen, welche sich zu einem Quadrat multiplizieren übersetzt
π(B)
sich zum
Finden
einer Linearkombination der 0 im Vektorraum F2 .
π(B)
Da dim F2
= π(B), ist jede Menge von π(B) + 1 Vektoren nicht linear unabhängig.
Es reichen also bereits π(B) + 1 Vektoren aus, um eine solche Linearkombination finden.
Die Algorithmen hierfür liefert die lineare Algebra bereits mittels Spaltenmanipulation
der zugehörigen Matrix.
Dies beantwortet die Probleme a) und b) Es stellen sich sofort zwei weitere Fragen:
c) Wie beurteilt man, welche der berechneten Zahlen B-glatt sind?
d) Wie ist B zu wählen, so dass sichergestellt ist, dass es ausreichend B-glatte Zahlen
π(B)
gibt, jedoch F2
nicht zu groß wird?
Eine Möglichkeit für c) wäre wiederholtes Dividieren durch die Primzahlen p1 , . . . , pπ(B) .
Eine andere, billigere Methode jedoch liefert eine Variation des Sieb des Eratosthenes.
Das Sieb des Eratosthenes. Gegeben sei eine natürliche Zahl N . Das Sieb des Eratosthenes findet die Primzahlen p ≤ N mittels folgendem Algorithmus:
1. Initialisiere ein Array A von N − 1 Einsen, jeweils eine für die Zahlen 2, . . . , N .
√
2. Für jede Zahl i ∈ {2, . . . , b N c} setze die Einträge, die Vielfachen von i entsprechen,
gleich 0.
3. Die Zahlen i, deren entsprechende Einträge noch 1 sind, sind Primzahlen.
√
Sieb des Eratosthenes zum finden von B-glatten Zahlen. Sei 2 ≤ B ≤ N .
1. Initialisiere ein Array A mit N − 1 Einsen, jeweils eine für die Zahlen 2, . . . , N .
2. Für jede Primzahlpotenz pα < N , sodass p ≤ B, multipliziere alle Einträge von A,
welche Vielfachen von pα entsprechen, mit p.
3. Die Zahlen, deren entsprechende Einträge in A gleich der Zahl selbst sind, sind Bglatt.
2
In unserem Fall suchen wir jedoch nicht nach B-glatten Zahlen in der Reihe 2, . . . , N , son√
dern unter den Werten f (d ne), . . . , f (N ) mit f (x) = x2 − n. Für das Sieben benötigen
2
wir offenbar nur jene Primzahlen
p < B, so dass x − n ≡ 0 mod p lösbar ist. Das sind
alle Primzahlen p < B, welche np = 1 erfüllen. Sei K deren Anzahl.
Sieb des Eratosthenes über das Polynom x2 − n
1. Bestimme die Primzahlen p1 , . . . , pk < B mit pni = 1.
2. for(1 ≤ i ≤ K) finde ±ai : a2i ≡ n mod pi (siehe [1, S. 100f]).
√
3. Initialisiere ein Array A mit Einträgen d ne2 − n, . . . , N 2 − n, jeweils entsprechend
√
den Zahlen d ne, . . . N .
4. for(i = 1, . . . , K)
Dividiere alle Einträge von A entsprechend ±ai + kpi , k ∈ Z, durch pi . Doch nur,
wenn sich eine ganze Zahl ergibt.
5. Falls in Schritt 4 keine Veränderung mehr festzustellen ist: Die Zahlen, deren entsprechende Einträge in A gleich 1 sind, sind B-glatt.
Diese Variation des Sieb des Eratosthenes ist die Antwort auf Frage c). Es ist K ∼ 12 π(B).
Die Zeit T , die der Algorithmus dann in Abhängigkeit von B benötigt, ist in etwa
T (B) = uu (K + 1) ln ln B,
wobei u = (ln n)/(2 ln B)
√
Das Minimum dieser Funktion liegt in der Größenordnung von B = exp(1/2 ln n ln ln n)
und damit ergibt sich eine Laufzeit von der Größenordnung L(n)1+o(1) , wobei
√
L(n) := exp( ln n ln ln n)
Das beantwortet Frage d). Wir fassen alles in folgendem Algorithmus zusammen.
p
1. Initialisierung Lege B fest, etwa B = d L(n)e.
Finde die Primzahlen p1 , . . . , pK < B mit pni = 1.
for(1 ≤ i ≤ K) finde ±ai : a2i ≡ n mod pi .
√
√
2. Sieben Siebe die Werte x2 − n, x = d ne, d ne + 1, . . ., nach B-glatten Zahlen, bis
K + 1 Stück gefunden sind. Fasse die gefundenen Paare (x, x2 − n) in einer Menge
S zusammen.
3. Lineare Algebra
alle (x, x2 − n) ∈ S: {
QK Für
ei
2
Falls x − n = i=1 pi , setze v(x2 − n) = (e1 , . . . , eK ) }.
Erstelle die (K + 1) × K-Matrix mit Spalten v(x2 − n).
Finde eine Linearkombination der 0: v(x1 ) + . . . + v(xk ) = 0.
4. Faktorisierung
Setze x = x1 · . . . · xk .
q
2
Setze y = (x1 − n) · . . . · (x2k − n) mod n.
Berechne d =ggT(x − y, n).
Return d.
3
Literatur
[1] Richard Crandall and Carl Pomerance, Prime numbers. a computational perspective, Springer, 2000.
[2] Armin Leutbecher, Zahlentheorie: Eine einfuehrung in die algebra, 1., Springer, 1996.
4
Herunterladen