pdf (2 Folien pro Blatt)

Werbung
Faktorisierung von Polynomen f ∈ Z[X] mit der
Gittermethode (Lenstra-Lenstra-Lovasz)
Factorize(f )
• input: quadratfreies Polynom f ∈ Z[X]
• output: Liste der Faktoren von f
– bestimme eine Primzahl p mit deg(f mod p) = deg f
und p 6 | discrf
– berechne Faktorisierung von f mod p in Zp [X]:
Findfactor(f, h, p)
• input:
sei f ∈ Z[X] mit deg f = n,
sei p Primzahl,
sei h ∈ Z[X] ein normiertes Polynom mit deg h = l ≤
n, und es gelte:
-
(h mod p)|(f mod p),
(h mod p) irreduzibel,
(h mod p)2 6 |(f mod p)
Koeffizienten von h sind reduziert mod p
f = h(1) · h(2) · . . . · h(t)
Liste 1 := {h(1) , h(2) , . . . , h(t) };
– f1 := 1; f2 := f ; Liste 2 := ∅;
– solange f2 6= ±1 :
wähle h ∈ Liste 1;
h0 := Findfactor(f2 , h, p);
Liste 2 := Liste 2 ∪ {h0 };
f1 := f1 · h0 ; f2 := f2 /h0 ;
für h(i) ∈ Liste 1 :
falls h(i) |h0 in Zp [X]: Liste 1 := Liste 1 \
(i)
{h };
– Return(Liste 2)
1
• output: der eindeutig bestimmte irreduzible Faktor h0 |f
in Z[X] mit (h mod p)|(h0 mod p)
– falls l = n : Return(f )
– bestimme kleinstes k mit
pkl > κ(f, n − 1) = 2n(n−1)/2
2(n−1) n/2
kf k2n−1
n−1
– bestimme mittels Hensel-Lifting h̃ ∈ Zpk [X] mit h̃|f in
Zpk [X] und h̃ ≡ h mod p
– u := max{v ; l ≤ (n − 1)/2v }
– versuche, für m = b(n−1)/2u c, b(n−1)/2u−1 c, . . . , b(n−
1)/2c, n − 1 mittels Searchfactor(f, h̃, p, k, m) das
gesuchte h0 zu bestimmen — liefert echten Faktor h0
oder, falls erfolglos, h0 = f )
2
Searchfactor(f, h, p, k, m)
• input:
sei f ∈ Z[X] mit deg f = n,
sei p Primzahl, k, m ∈ N+ ,
sei h ∈ Z[X] ein normiertes Polynom mit deg h = l ≤
m, und es gelte:
(h mod pk )|(f mod pk ),
(h mod p) irreduzibel,
(h mod p)2 6 |(f mod p)
Koeffizienten von h sind reduziert mod pk
(also khk2 ≤ 1 + l · p2k )
n/2
- pkl > κ(f, m) := 2mn/2 2m
· kf km+n
m
-
Zur Begründung des Faktorisierungssalgorithmus mittels
der Gittermethode
– Notation: generell ist nachfolgend
f ∈ Z[X] mit deg f = n,
h ∈ Z[X] normiertes Polynom mit deg h = l(≤ n)
p eine Primzahl, k, m ∈ Z+ mit m ≥ l
h|f in Zpk [X]
h irreduzibel in Zp [X]
h2 6 |f in Zp [X]
– Gitterdefinition: in Rm+1 ' R + R · X + . . . + R · X m
wird ein Gitter definiert
Lh,m := {g ∈ Z[X] ; deg g ≤ m , h|g in Zpk [X]}
• output: sei h0 ∈ Z[X] der bis auf Vorzeichen eindeutig
bestimmte Faktor von f in Z[X] mit (h mod p)|(h0 mod p)
Es wird entschieden, ob deg h0 ≤ m gilt oder nicht;
wenn“ja”, wird h0 berechnet
Dieses Gitter hat als Basis
– konstruiere Gitter L ⊆ Rm+1 mit der Basis
und es ist
{pk X i ; 0 ≤ i < l} ∪ {hX j ; 0 ≤ j ≤ m − l}
{pk X i ; 0 ≤ i < l} ∪ {h · X j ; 0 ≤ j ≤ m − l}
det Lh,m = pkl
– berechne mittels Reduce eine reduzierte Gitterbasis
hb1 , . . . , bm+1 i von L
– falls kb1 k < (pkl /kf km )1/n :
berechne t := max{j ≤ m+1 ; kbj k < (pkl /kf km )1/n }
Return(gcd(b1 , . . . , bt ))
ansonsten Fehlanzeige
3
4
– Lemma 1: Es gibt einen irreduziblen Faktor h0 ∈
Z[X] von f mit h|h0 in Zp [X].
h0 ist bis auf Vorzeichen eindeutig bestimmt.
– Lemma 2: Mit h0 wie in L1 sind für g ∈ Z[X] mit g|f
in Z[X] äquivalent
1. h|g in Zp [X]
2. h|g in Zpk [X]
3. h0 |g in Z[X]
– Erinnerung: gilt g|f in Z[X] und deg g ≤ m, so gilt
1/2
2m
kf k
kgk ≤
m
– Lemma 4: Ist hb1 , . . . , bm+1 i eine LLL-reduzierte Basis
für Lh,m und gilt
1/2
2m
kf k · 2m/2 ·
<η
m
so gilt
deg h0 ≤ m ⇐⇒ kb1 k < η
– Bem: insbesondere h|h0 in Zpk [X], also h0 ∈ Lh,m falls
deg h0 ≤ m.
– Lemma 5: Unter den Voraussetzungen von L4 sei
– Lemma 3: Ist b ∈ Lh,m mit
kl 1/n
p
kbk <
=: η ( = η(f, p, k, l, m) )
kf km
t := max{j ≤ m + 1 ; kbj k < η}
Dann gilt
deg h0 = m + 1 − t und h0 = gcd(b1 , . . . , bt )
so gilt h0 |b in Z[X], also insbesondere gcd(f, b) 6= 1.
5
6
Zur Komplexität der LLL-Faktorisierungsmethode
• Komplexität der Gitterreduktion Reduce(bi , . . . , bn ),
wobei kbi k2 ≤ B (1 ≤ i ≤ n):
– Anzahl der arithmetischen Operationen:
O(n4 · log B)
– Grösse der beteiligten Zahlen:
O(n · log B)
• Komplexität von Searchfactor(f, h, p, k, m)
– Anzahl der arithmetischen Operationen:
O(m4 · k · log p)
– Grösse der beteiligten Zahlen:
O(m · k · log p)
Kommentar: wesentlich ist der Aufwand für die Gitterreduktion, bei der B = 1 + l · p2k (wegen khk2 ≤ 1 +
l · p2k ) und n = m + 1 angesetzt werden muss. Die Ungleichung pkl > κ(f, m) führt auf m = O(k · log p) und
wegen log l < l ≤ m ist dann auch log B ∈ O(k · log p).
Die Koeffizienten der Gittervektoren bj , die zur Berechnung von
p h0 mittels ggT herangezogen werden, sind
durch n pkl /kf km beschränkt, wodurch man mittels
bekannter Abschätzungen für den Aufwand von ggTBerechnungen auf O(m3 ) arithmetische Operationen
von Zahlen der Grösse O(log B) kommt.
7
• Komplexität von Findfactor(f, h, p)
(dabei sei n = deg f und m0 = deg h0 )
– Anzahl der arithmetischen Operationen:
O(m0 · (n5 + n4 · log kf k + n3 · log p))
– Grösse der beteiligten Zahlen:
O(n3 · n2 · log kf k + n · log p)
Kommentar: aus der Bestimmung pk−1 < κ(f, n − 1)
folgt k · log p ∈ O(n2 + n · log kf k + log p).
Searchfactor wird aufgerufen für
m = b(n−1)/2u c, b(n−1)/2u−1 c, . . . , b(n−1)/2u1 c =: m1
wobei m1 < 2m0 ist. Wegen
m 4 m 4
1
1
m41 +
+
+ . . . = O(m40 )
2
4
hat man insgesamt in den Aufrufen von Searchfactor
O(m40 · k · log p) ∈ O(m40 · (n2 + n · log kf k + · log p)
arithmetische Operationen von Zahlen der Grösse
O(m1 · k · log p) ∈ O(m0 · (n2 + n · log kf k + · log p)
und es ist m0 ≤ n. Wenn man so abschätzt, fallen
Kosten für Hensel-Lifting nicht ins Gewicht.
8
• Komplexität von Factorize(f )
(dabei sei f ∈ Z[X], quadratfrei, primitiv, mit deg f =
n)
– Anzahl der arithmetischen Operationen:
O(n6 + n5 · log kf k)
• Zusammenfassung: mit den ”klassischen” Algorithmen
für Addition, Subtraktion, Multiplikation, ... ergibt
sich für die LLL-Methode ein Aufwand von
O(n12 + n9 · (log kf k)3 )
gemessen in Bit-Operationen.
– Grösse der beteiligten Zahlen:
O(n3 + n2 log kf k)
Kommentar: zunächst muss man sich um die Grösse
der Primzahl p Gedanken machen. Sei p die kleinste
Primzahl mit p 6 |res(f, f 0 ), so kann man aus |res(f, f 0 )| ≤
nn · kf k2n−1 ein Abschätzung
n · log n + (2n − 1) log(kf k)
A
mit A = 0.84 gewinnen. D.h., (log p)-Terme fallen
weiter nicht ins Gewicht und können unterdrückt werden.
Ein Aufruf von Findfactor(f2 , h, p) kostet O(m0 ·
(n5 + n4 · log kf k)) arithmetische Operationen. Aus
Landau-Mignotte folgt leicht log kf2 k ∈ O(n+log kf k).
Die m0 als Grade der verschiedenen irreduziblen Faktoren von f summieren sich zu n, sodass man die arithmetischen Operationen mit O(n6 + n5 · log kf k) abschätzen kann. Die beteiligten Zahlen haben eine Grösse
p<
O(n3 + n2 · log kf2 k) ∈ O(n3 + n2 · log kf k)
Der Aufwand für Resultantenberechnung, Finden einer
geeigneten Primzahl, Berlekamp-Faktorisierung geht in
dieser Abschätzung auf.
9
10
Herunterladen