Der Algorithmus von Agrawal, Kayal und Saxena

Werbung
Primzahltest in Polynomialzeit —
Der Algorithmus von Agrawal, Kayal und Saxena
Vorlesungsnotizen von Martin Dietzfelbinger, TU Ilmenau
24. Oktober 2002
1
Stand der Dinge
Am 6. August 2002 verbreiteten
Manindra Agrawal, Neeraj Kayal und Nitin Saxena
(vom Dept. of Computer Science and Engineering,
Indian Institute of Technology Kanpur, Indien)
über das Internet ein Manuskript [3] mit dem Titel PRIMES is in P“, in dem
”
für das Primzahlproblem ein Polynomialzeitalgorithmus angegeben wurde.
Genauer ist PRIMES“ das Problem, zu einer gegebenen Zahl n zu entscheiden,
”
ob n eine Primzahl ist oder nicht. Algorithmentheoretisch definiert man
PRIMES = {bin(n) | n ist eine Primzahl},
wobei bin(n) die Binärdarstellung der Zahl n bedeutet. Damit ist PRIMES ⊆
{0, 1}∗ , also eine Sprache. Die Frage ist, ob PRIMES in der Klasse P der in polynomieller Zeit entscheidbaren Sprachen liegt.
√
Offensichtlich gibt es einen Algorithmus, der das Primzahlproblem mit ≤ n
Divisionen löst. Dies ist aber kein Polynomialzeitalgorithmus, weil als Länge der
Eingabe die Bitanzahl
|bin(n)| = dlog2 (n + 1)e
gilt. Ein Polynomialzeitalgorithmus für dieses Problem ist also einer, der auf
Input bin(n) Laufzeit O(p(|bin(n)|) = O(p(log(n))) hat, für ein Polynom p.
Bisher war kein solcher Algorithmus bekannt.
Die Bedeutung des neuen Ergebnisses liegt darin, dass das Primzahlproblem und
Algorithmen für dieses Problem seit Jahrhunderten betrachtet werden1 . Seit es
1
Agrawal, Kayal und Saxena führen ein Zitat von Karl Friedrich Gauß aus den “Disquisitiones Arithmeticae” von 1801 an, das die fundamentale Bedeutung des Primzahlproblems
unterstreicht.
1
moderne Algorithmik und das Konzept des Zeitaufwandes gibt (seit den 60er Jahren des 20. Jahrhunderts), hat man sich darauf geeinigt, höchstens die Probleme
als effizient lösbar“ anzusehen, die einen Polynomialzeitalgorithmus haben; da”
her rührt das große Interesse an der Klasse P.
Es gab schon eine ganze Weile (Solovay/Strassen 1977 [13] und Miller-Rabin
1980 [10, 11]) sehr effiziente und einfach zu implementierende randomisierte Algorithmen für das Primzahlproblem. Die Anzahl der arithmetischen Operationen in diesen Tests ist O(log n), wenn man mit einer konstanten, von n unabhängigen Fehlerwahrscheinlichkeit zufrieden ist. Für eine Fehlerwahrscheinlichkeit von n−c , c eine beliebige feste Konstante, bezahlt man mit einer Anzahl von
O((log n)2 ) arithmetischen Operationen. Das Problem mit den einfachen randomisierten Tests ist, dass sie (mit kleiner Wahrscheinlichkeit, aber immerhin
möglich) eine zusammengesetzte Zahl als prim deklarieren können. Sehr komplexe randomisierte Algorithmen, ebenfalls mit polynomieller Laufzeit (Adleman,
Huang 1992 [1]), vermeiden dies, indem sie jede der beiden Antworten ( n prim“
”
oder n zusammengesetzt“) mit einem Zertifikat“ ergänzen, das die Richtigkeit
”
”
der Ausgabe belegt.
Der bisher schnellste deterministische Primzahltest (Adleman, Pomerance und
Rumely 1983 [2]) hat eine Laufzeitschranke von O((log n)c log log log n ) für eine
Konstante c. Diese Laufzeitschranke ist superpolynomiell, wenn auch nur ganz
schwach.
Da der neue Algorithmus im Vergleich zu den bekannten randomisierten Verfahren eine relativ hohe Laufzeit hat2 und diese Algorithmen das Problem für
praktische Zwecke ausreichend gut lösen, hält sich die Änderung in der Praxis in
Grenzen.
In diesem Zusammenhang sollte man anmerken, dass die Sicherheit von Kryptosystemen (wie dem RSA-Schema), die auf der Annahme beruht, dass das Finden
der Faktoren von zusammengesetzten Zahlen schwierig ist, von dem neuen Ergebnis nicht betroffen ist. Der neue Algorithmus führt nicht direkt zu neuen
Erkenntnissen über die Komplexität des Faktorisierungsproblems. (Für Details
zum Faktorisierungsproblem siehe z. B. [8].)
Man wusste schon lange, dass die Sprache PRIMES in NP und in co-NP liegt.
Es war also nicht zu verwundern, dass es keinen NP-Vollständigkeitsbeweis für
PRIMES gab. Auf die P-NP-Frage hat das neue Resultat keine Auswirkungen, da
PRIMES nicht NP-vollständig ist (außer wenn doch P = NP ist, natürlich).
In diesen Skizzen wird der Algorithmus von Agrawal, Kayal und Saxena motiviert und angegeben und nach Diskussion einiger algebraischer Grundlagen die
Korrektheits- und die Laufzeitanalyse durchgeführt.
2
O((log n)12 · poly(log log n)) ist ohne Annahmen beweisbar. In Wirklichkeit erwartet man
eine Laufzeit in O((log n)6 ·poly(log log n)); diese folgt aus einer zahlentheoretischen Vermutung,
deren Richtigkeit von vielen Forschern angenommen wird.
2
2
Notation, grundlegende Tatsachen
In diesem Abschnitt rekapitulieren wir kurz Notation und elementare Tatsachen
zu Teilbarkeit, zu endlichen Gruppen und zu modularer Arithmetik. Eine kompakte Darstellung dieser Konzepte findet man z. B. in [12, Kap. 5].
Notation 2.1 (a) Wenn a die Zahl b teilt, schreiben wir a | b, wenn a nicht b
teilt, schreiben wir a 6 | b.
(b) ggT(a, b) bezeichnet den größten gemeinsamen Teiler von a und b.
(c) Wenn a und b teilerfremd sind, d. h. wenn ggT(a, b) = 1 ist, schreiben wir
a ⊥ b.
Gruppen werden multiplikativ notiert; das neutrale Element in einer Gruppe wird
mit 1 bezeichnet.
Fakt 2.2
(a) Wenn (G, ·, 1) eine endliche Gruppe ist und z ∈ G, dann gilt:
(i) ordG (z) = min{i ≥ 1 | z i = 1} ist ein Teiler von |G| ;
(ii) z |G| = 1.
(b) Wenn (G, ·, 1) zyklisch ist mit erzeugendem Element a, d. h. wenn
G = {1, a, a2 , . . . , a|G|−1 }, dann gilt für i, j ≥ 0: ai = aj ⇔ |G| teilt i − j.
(c) Wenn G eine zyklische Gruppe ist, dann ist auch jede Untergruppe von G
zyklisch.
Fakt 2.3 (a) Zu n ≥ 2 kann man den Ring Zn = Z/nZ bilden, indem man
Addition und Multiplikation in Z modulo n ausführt. Der Ring Zn hat (im wesentlichen) die Elemente 0, 1, . . . , n − 1.
(b) Wenn p eine Primzahl ist, dann ist Zp ein Körper mit p Elementen.
(c) Für die multiplikative Gruppe in Zp schreibt man Z∗p . Sie hat (im wesentlichen)
die Elemente 1, 2, . . . , p − 1.
Fakt 2.4 (Kleiner Satz von Fermat) Sei p eine Primzahl.
(a) Für p 6 | a gilt: ap−1 ≡ 1
(mod p).
(b) Für jedes a gilt: ap ≡ a
(mod p).
Beweis. (a) Weil p 6 | a, ist a ein Element von Z∗p , einer Gruppe mit p − 1
∗
Elementen. Nach Fakt 2.2(a) ist a|Zp | = ap−1 = 1 in dieser Gruppe; das ist aber
gerade die Behauptung.
(b) ist für p | a trivial und folgt für p 6 | a aus (a).
3
Definition 2.5 Wenn p eine Primzahl ist und p 6 | a, dann nennen wir
ordp (a) = ordZ∗p (a) = min{i ≥ 1 | ai ≡ 1
(mod p)}
die Ordnung von a modulo p.
Wir benötigen das folgende technische Lemma.
Lemma 2.6 Sei p eine Primzahl, p 6 | a. Dann gilt:
(a) ordp (a) teilt p − 1.
(b) Wenn q eine Primzahl ist, für die q | (p − 1) , aber q 2 6 | (p − 1) gilt, dann gilt
für s = (p − 1)/q:
q | ordp (a) ⇔ as 6≡ 1 (mod p).
Beweis. (a) Da ordp (a) = ordZ∗p (a) und |Z∗p | = p − 1, folgt dies aus Fakt 2.2(b).
(b) Als Teiler von p − 1 ist ordp (a) das Produkt einiger Primfaktoren von p − 1.
Weil p − 1 = qs, q prim, q 6 | s, und mit Fakt 2.2(b), angewendet auf die zyklische
Gruppe {ai mod p | i ≥ 0}, folgt
q 6 | ordp (a) ⇔ ordp (a) | s ⇔ as ≡ 1
3
(mod p).
Motivation
In diesem Abschnitt wird die Grundidee des Algorithmus erklärt. Dazu werden
einige Konzepte zu Polynomen naiv benutzt. Die nötigen formalen Definitionen
findet man bei Bedarf in Abschnitt 6.2.
Lemma 3.1 Es sei n ≥ 2 beliebig, a sei teilerfremd zu n. Dann gilt:
n ist Primzahl ⇔ (X + a)n ≡ (X n + a) (mod n).
Mit der zweiten Aussage ist gemeint: Wenn man das Polynom (X + a)n ausmultipliziert und die Koeffizienten modulo n nimmt, ergibt sich X n + a.
Beweis. Man schreibt:
X n (X + a) =
ai X n−i .
i
0≤i≤n
n
⇒“: Wenn n eine Primzahl ist, dann ist für 1 ≤ i ≤ n − 1 in
”
n
n(n − 1) . . . (n − i + 1)
=
i
i!
4
(1)
der Zähler durch n teilbar, der Nenner aber nicht, also gilt n | ni . Daraus folgt,
dass modulo nin der Summe in (1) nur der erste und der letzte Term nicht 0 sind.
Weiter gilt nn an = an ≡ a (mod n), wegen des kleinen Satzes von Fermat“
”
(Fakt 2.4(a)).
⇐“: Wenn n keine Primzahl ist, dann sei p ein Primfaktor von n und s ≥ 1 so,
”
dass ps | n und ps+1 6 | n. Betrachte den Summanden mit Index p in (1):
n p n(n − 1) . . . (n − p + 1) p
a =
a.
p
p!
Der Zähler ist durch ps teilbar, nicht aber durch ps+1 , der Nenner ist durch
p teilbar. Weil a und n teilerfremd sind, gilt p 6 | a und damit p 6 | ap . Also ist
n(n−1)...(n−p+1) p
a nicht durch ps teilbar und damit auch nicht durch n. Das bep!
deutet, dass modulo n gesehen der Koeffizient np ap bei X p nicht 0 ist, damit ist
(X + a)n 6≡ (X n + a) (mod n).
Dieses Lemma führt zu einem naheliegenden Verfahren, um zu testen, ob eine
ungerade Zahl n eine Primzahl ist: Wähle ein a < n, das teilerfremd zu n ist
(z. B. a = 1). Berechne alle Koeffizienten (mod n) des Polynoms, das aus (X +a)n
durch Ausmultiplizieren entsteht. Wenn alle Koeffizienten außer dem bei X n und
der Konstanten an gleich Null sind, ist n Primzahl, sonst nicht.
Der Nachteil dieses Tests ist, dass beim Ausmultiplizieren n + 1 Terme entstehen
und damit die Laufzeit noch
√ viel größer ist, als wenn man n versuchsweise durch
alle ungeraden Zahlen < n teilen würde ( trial division“).
”
Der Grundansatz des neuen Primzahltests ist es, die Äquivalenz
(X + a)n ≡ (X n + a)
(mod n)
(2)
nicht absolut“ zu testen, sondern modulo eines (geschickt gewählten) anderen
”
Polynoms X r − 1. Man berechnet also
(X + a)n mod (n, X r − 1)
und
(X n + a) mod (n, X r − 1),
und vergleicht die Resultate. Die Rechnung modulo n bedeutet wie üblich, dass
man Zahlen m durch m mod n ersetzen kann. Die Rechnung modulo X r − 1
bedeutet, dass man X r durch 1, also X s durch X s mod r ersetzen kann.
Während des Potenzierungsvorgangs für (X + a)n kann man also in den Polynomen, die als Zwischenergebnisse auftreten, Potenzen X s mit s > r immer wieder
entfernen und hat es stets nur mit Polynomen vom Grad < r zu tun. Das hält
den Berechnungsaufwand klein, solange r nicht zu groß ist.
Wenn n prim ist, muss das Ergebnis für jedes a und jedes r gleich X n mod r + a
sein.
Für die umgekehrte Richtung möchte man gerne mit einem einzigen r auskommen, das nicht zu groß ist, damit die Grade der auftretenden Polynome nicht zu
groß sind. Ein zentraler Punkt bei diesem Ansatz ist also zu definieren, was ein
5
geeignetes r ist, und zu zeigen, dass es nicht zu große geeignete r gibt. Weiter
stellt sich heraus, dass es selbst für solche geeigneten r nicht mehr genügt, ein
einziges a zu betrachten, sondern dass man die Bedingung
(X + a)n ≡ (X n + a)
(mod n, X r − 1)
für eine ganze Reihe von Zahlen a testen muss, um schließen zu können, dass n
. . . nein, nicht prim, aber zumindest Potenz einer Primzahl ist. Der Fall, dass n
eine echte Potenz irgendeiner Zahl ist, ist aber ganz leicht zu behandeln.
4
Der Algorithmus
Input: ungerade Zahl n > 2
1. if ( n hat die Form ab fuer b > 1 ) then output ZUSAMMENGESETZT;
2. r ← 2;
3. while ( r < n ) {
4.
if ( ggT(n, r) 6= 1 ) then output ZUSAMMENGESETZT;
5.
if ( r prim ) then
q ← groesster Primfaktor von r − 1;
√
if ( q ≥ 4 r log n )
and ( n(r−1)/q 6≡ 1 (mod r) ) then
6.
7.
8.
9.
break;
r←r+1 ;
10.
11. }
√
12. for a = 1 to b2 r log nc do
13.
14.
if (X + a)n 6≡ (X n + a) (mod X r − 1, n) then
output ZUSAMMENGESETZT;
15. output PRIM;
5
Die Laufzeitanalyse
Die Laufzeitanalyse hat zwei Teile. In Abschnitt 5.1 wird der Zeitaufwand für
die einzelnen Operationen des Algorithmus analysiert. Der zweite, schwierigere
Teil besteht darin zu zeigen, dass die while-Schleife spätestens nach O((log n)6 )
Durchläufen abbricht. Dies wird in Abschnitt 5.2 durchgeführt.
6
5.1
Kosten der Einzeloperationen
An manchen Stellen benutzt der Algorithmus etwas komplexere Operationen. Wir
beginnen damit zu erklären, wie man sich die Durchführung vorstellen muss, und
schätzen den Zeitaufwand ab.
Zahldarstellung, Zeitaufwand für arithmetische Operationen. Wir stellen uns die Zahlen in binärer Notation vor. Es ist offensichtlich, dass bei der
Durchführung des Algorithmus keine Zahl vorkommt, die größer als n2 ist, also
die Bitlänge 2 log n nie überschritten wird. Von der Bitkomplexität her gesehen, benötigt die Ausführung der gewöhnlichen arithmetischen Operationen auf
solchen Zahlen polynomielle Zeit, selbst wenn ganz naive Algorithmen benutzt
werden: Addition und Subtraktion brauchen Zeit O(log n), Multiplikation und
Division Zeit O((log n)2 ). Vor diesem Hintergrund werden wir im folgenden nur
die Anzahl der arithmetischen Operationen betrachten, also Laufzeiten in der
Einheit arithmetische Operationen auf log n-Bit-Zahlen“ angeben.
”
Schnelle Exponentiation. Eine zentrale Operation im Algorithmus ist die Exponentiation. Es sei (H, ·) eine beliebige Halbgruppe. Zu Input a ∈ H und m ≥ 1
sei am zu berechnen. Hierzu benutzt man das Verfahren der schnellen Exponen”
tiation“, das durch die folgende Rekursionsformel angegeben wird:

für m = 1,
 a,
(as )2 ,
für m = 2s, s ≥ 1;
am =
 s 2
(a ) · a, für m = 2s + 1, s ≥ 1.
Man kann leicht sehen, dass die Anzahl der Halbgruppenmultiplikationen höchstens
2 log2 m ist, also die benötige Gesamtanzahl von Operationen O(log m) ist.
Man wendet dieses Verfahren an, um etwa am mod n für Zahlen a, m, n in O(log m)
Multiplikationen modulo n zu berechnen, oder auch, um (X+a)n mod (n, X r − 1)
in O(log n) Multiplikationen von Polynomen vom Grad < r mit Koeffizienten in
{0, 1, . . . , n − 1} zu berechnen.
In Zeile 1 soll getestet werden, ob n als echte Potenz ab einer Zahl a geschrieben
werden kann. Offenbar kommen hierfür nur Zahlen b mit 2 ≤ b ≤ log2 n in Frage.
Für jedes solche b führt man folgende Berechnung durch: Wenn ein a < n gegeben
ist, kann man durch schnelle Exponentiation in O(log b) Operationen feststellen,
ob ab < n oder ab = n oder ab > n ist. Dieser Umstand macht es möglich,
eine binäre Suche in {1, . . . , n} nach einem a durchzuführen, das ab = n erfüllt.
Eine solche binäre Suche benötigt O(log n) Exponentiationen, also O((log n)2 )
arithmetische Operationen. Der gesamte Aufwand für Zeile 1 beträgt demnach
O((log n)3 ).
Wenn n gegeben ist, nennen wir eine Primzahl r < n n-gut“, wenn r 6 | n und
”
der größte Primteiler q von r − 1 folgendes erfüllt:
√
(i) q ≥ 4 r log n, und
(ii) n(r−1)/q 6≡ 1
(mod r).
7
(Welche Bedeutung Bedingung (ii) hat, die in Zeile 8 getestet wird, wird durch
Lemma 2.6(b) etwas klarer: n(r−1)/q 6≡ 1 (mod r) bedeutet, dass q ein Teiler
von ordr (n) ist, und insbesondere, dass q ≤ ordr (n) ist. Zusammen mit (i) ergibt
das eine untere Schranke für ordr (n).) Die Schleife in Zeilen 3–11 testet für
r = 2, 3, 4, . . . nacheinander, ob ggT(n, r) 6= 1 (in diesem Fall ist n offensichtlich
nicht prim) und dann, ob r eine n-gute Zahl ist. Wie oft diese Schleife durchlaufen
wird, hängt von der folgenden Größe ab:
ρ(n) := min{r | ggT(n, r) 6= 1 oder r ist n-gut oder r = n}.
Im Abschnitt 5.2 werden wir sehen, dass ρ(n) = O((log n)6 ) gilt. Einstweilen
können wir die Laufzeit des Algorithmus als Funktion von ρ(n) abschätzen.
Die ggT-Berechnung in Zeile 4 wird mit dem Euklidischen Algorithmus durchgeführt. der Aufwand für ein r ist O(log n); der Gesamtaufwand beträgt also
O(ρ(n) log n). Für die Entscheidung in Zeile 5, ob r eine Primzahl ist, führt
man eine Primzahltabelle mit, z. B. eine Version des Siebs des Eratosthenes, die
immer bis zur nächstgrößeren Zweierpotenz 2dlog2 re reicht. Hierfür genügt ein
Gesamtaufwand von O(ρ(n) log log(ρ(n))).√Um in Zeile 6 zu ermitteln, ob der
größte Primfaktor von r − 1 mindestens√4 r log n ist, kann man mit Hilfe derselben Tabelle alle Primfaktoren q 0 < r von r − 1 ermitteln und dividieren.
Gesamtaufwand: O(ρ(n)3/2 ). Zur Berechnung von n(r−1)/q mod r in Zeile 8 benutzt man die schnelle Exponentiation, mit Gesamtaufwand O(ρ(n) log n). Der
Gesamtaufwand für alle Schleifendurchläufe ist also O(ρ(n)3/2 + ρ(n) log(n)).
√
In Zeilen 12–14 wird für das vorher ermittelte r für jedes a, 1 ≤ a ≤ 2 r log n,
das Polynom (X + a)n mod (X r − 1, n) berechnet und mit X n + a ≡ X n mod r + a
verglichen. Zur Berechnung der Potenz (X + a)n mod (X r − 1, n) benutzt man
die schnelle Exponentiation, wobei nach jeder einzelnen Multiplikation die Reduktion modulo n einfach dadurch erfolgt, dass man einen Koeffizienten ai ≥ n
durch ai mod n ersetzt; die Reduktion modulo X r − 1 bedeutet, dass man in
jedem Zwischenergebnis X i mit i ≥ r durch X i mod r ersetzt. Als Zwischenergebnisse ergeben sich also immer Polynome vom Grad < r mit Koeffizienten in
{0, 1, . . . , n − 1}. Da eine Multiplikation von Polynomen vom Grad < r Aufwand
O(r2 ) hat (bei naiver Ausführung), ist der Aufwand zur Berechnung einer solchen
Potenz O(ρ(n)2 log n); für alle a zusammen ergibt sich ein Aufwand von
p
O( ρ(n) log n · ρ(n)2 log n) = O(ρ(n)5/2 (log n)2 ).
Mit schnelleren Polynom-Multiplikationsverfahren (basierend auf der schnellen
diskreten Fourier-Transformation, siehe z. B. [14, Kap 3.11]) kann diese Zeitschranke auf O(ρ(n)3/2 (log n)3 ) verbessert werden.
Wir sehen also, dass der Algorithmus Laufzeit O((log n)k ) für eine Konstante k
hat, wenn wir gezeigt haben dass ρ(n) = O((log n)6 ) gilt. Letzteres geschieht im
nächsten Abschnitt.
8
5.2
Schranke für gute“ r
”
In diesem Abschnitt zeigen wir, dass die while-Schleife im Algorithmus nach
spätestens O((log n)6 ) Iterationen abbricht. Als Basis benötigen wir einige Aussagen aus der Zahlentheorie. Den Hintergrund bildet der berühmte Primzahlsatz,
der besagt, dass asymptotisch gesehen die Anzahl der Primzahlen, die kleiner als
x sind, sich wie x/ln x verhält.
Wir definieren, für x ∈ R+ :
π(x) = |{p ≤ x | p ist eine Primzahl}|.
Satz 5.1 (Primzahlsatz)
π(x)
= 1.
x→∞ x/ln x
lim
Wir brauchen hier nur eine abgeschwächte Version des Primzahlsatzes (die auch
einen deutlich einfacheren Beweis hat).
Fakt 5.2 Für alle x ≥ 2 gilt: 3
x
8x
≤ π(x) ≤
.
6 log x
log x
Beweis. Siehe z. B. [4].
Unter allen Primzahlen r ≤ x interessieren uns die besonders, für die r − 1 einen
sehr großen Primteiler hat. Für beliebiges a sei P (a) die größte Primzahl, die a
teilt. Das folgende tiefliegende Resultat aus der analytischen Zahlentheorie ist
der Dreh- und Angelpunkt der Zeitanalyse unseres Algorithmus.
Fakt 5.3 Es gibt ein (kleines) c > 0 und ein (großes) x0 , so dass für alle x ≥ x0
gilt:
x
|{r | r Primzahl, r ≤ x, P (r − 1) > x2/3 }| ≥ c
.
log x
Beweis. Siehe [7, 5].
In Kombination mit Fakt 5.2 besagt Fakt 5.3, dass asymptotisch gesehen für
einen konstanten Bruchteil der Primzahlen r ≤ x gilt, dass P (r − 1) > x2/3 , dass
also r − 1 einen Primfaktor q ≥ x2/3 hat. Fakt 5.2 und Fakt 5.3 bilden die Basis
für den Beweis der folgenden entscheidenden Aussage, die unmittelbar impliziert,
dass die while-Schleife im Algorithmus nach O((log n)6 ) Iterationen abbricht.
3
Hier und im Rest des Textes steht log“ für den Logarithmus zur Basis 2.
”
9
Lemma 5.4 Es gibt Konstante c1 , c2 > 0 und n0 mit folgender Eigenschaft: Für
jedes n ≥ n0 gibt es eine Primzahl r mit c1 (log n)6 < r ≤ c2 (log n)6 , die entweder
Teiler von n ist oder n-gut ist.
Beweis. Es sei c wie in Fakt 5.3 gewählt. Wir rechnen zunächst mit beliebigen
Konstanten c2 ≥ c1 ≥ 1 und legen nachher fest, wie groß diese sein müssen. Die
Zahl n sei beliebig, aber (auch bezüglich c1 und c2 und x0 aus Fakt 5.3) genügend
groß, damit die folgenden Abschätzungen gerechtfertigt sind. Wir nennen eine
Zahl r < n n-speziell, wenn r Primzahl ist und P (r − 1) > (c2 (log n)6 )2/3 gilt.
Wegen Fakt 5.2 und Fakt 5.3 gilt
|{r | r ist n-speziell und c1 (log n)6 < r ≤ c2 (log n)6 }|
≥ |{r ≤ c2 (log n)6 | r ist n-speziell}| − |{r ≤ c1 (log n)6 | r ist Primzahl }|
≥ c·
8c1 (log n)6
c2 (log n)6
−
log(c2 (log n)6 ) log(c1 (log n)6 )
c · c2 (log n)6 8c1 (log n)6
−
7 log log n
6 log log n
(log n)6
cc2 8c1
=
·
−
.
log log n
7
6
≥
Wenn wir also c1 = 46 wählen und dann c2 so, dass c3 = cc72 − 8c61 eine positive Konstante ist, dann ist die Anzahl der n-speziellen Zahlen r in ((4 log n)6 , c2 (log n)6 ]
6
3 (log n)
mindestens clog
.
log n
Setze nun y = c2 (log n)6 und betrachte das Produkt
Y
Π=
(nj − 1).
1≤j≤y 1/3
1/3
1/3
Weil Π < (ny )y = ny
gung von Π kleiner als
log(n
y 2/3
2/3
)=y
, ist die Anzahl der Faktoren in der Primfaktorzerle-
2/3
6 2/3
log n = (c2 (log n) )
c3 (log n)6
log n <
log log n
(für n genügend groß). Daher gibt es in ((4 log n)6 , c2 (log n)6 ] eine n-spezielle Zahl
r, die kein Teiler von Π ist.
Diese Primzahl r hat die gewünschten Eigenschaften: Wenn r | n, sind wir fertig.
Wenn r 6 | n, ist r n-gut, was man wie folgt einsieht:
(i) Weil r n-speziell ist, hat r − 1 einen Primfaktor q mit
q > (c2 (log n)6 )2/3 > r2/3 ;
weil r ≥ (4 log n)6 ist, gilt weiter
√
√
q > r2/3 = r · r1/6 ≥ 4 r log n.
10
(ii) Weil r das Produkt Π nicht teilt, gilt für jedes j, 1 ≤ j ≤ y 1/3 , dass
r 6 | (nj − 1), d. h. nj 6≡ 1 mod r. Nach (i) ist aber
(r − 1)/q < r/r2/3 = r1/3 ≤ y 1/3 ;
daher gilt n(r−1)/q 6≡ 1 mod r, wie gewünscht.
6
Algebraische Grundlagen für den Korrektheitsbeweis
In diesem Kapitel werden weitere algebraische Konzepte und Tatsachen bereitgestellt, die zum Beweis der Korrektheit des Algorithmus nötig sind. Man findet
diese Dinge in allen Lehrbüchern zur Algebra, siehe z. B. [9], aber auch, in kompakter Form, in [12]. Für manche Aussagen, die nicht zu den engsten Grundlagen
gehören, werden Beweise angegeben.
6.1
Endliche Körper
Fakt 6.1 Es gibt einen endlichen Körper F mit q Elementen genau dann wenn
q Potenz einer Primzahl ist.
Die multiplikative Gruppe in einem endlichen Körper F wird mit F∗ bezeichnet.
Sie hat |F| − 1 Elemente.
Die folgende Aussage ist wohlbekannt und hat viele interessante Beweise, siehe
z. B. [8, S. 34] oder [12] oder Anhang A.
Fakt 6.2 Wenn F ein endlicher Körper ist, dann ist die multiplikative Gruppe
F∗ zyklisch — das heißt, es gibt ein primitives Element“ z in F∗ mit F∗ =
”
{1, z, z 2 , . . . , z |F|−2 }.
6.2
Polynomringe, Körperkonstruktionen
Ausgehend vom Ring Zn betrachtet man den Polynomring
Zn [X] = {f (X) | f (X) Polynom mit Koeffizienten in Zn }.
Dabei ist ein Polynom ein Ausdruck
ak X k + ak−1 X k−1 + · · · + a1 X + a0
11
mit k ≥ 0 und ak , . . . , a0 ∈ Zn . Jeder Koeffizientenfolge entspricht genau ein Polynom. Formal kann man dieses Polynom mit der unendlichen Koeffizientenfolge
(a0 , a1 , . . . , ak , 0, 0, . . .) identifizieren.
Ein wichtiges Konzept ist der Grad deg(f (X)) eines Polynoms, das folgendermaßen definiert ist.
Definition 6.3 Wenn f (X) die Koeffizientenfolge (a0 , a1 , . . .) hat (nur endlich
viele von 0 verschiedene Einträge), dann hat f (X) Grad deg(f (X)) = −∞, wenn
alle Koeffizienten 0 sind, und Grad deg(f (X)) = max{i | ai 6= 0} sonst.
Es ist klar, dass es genau nd Polynome in Zn [X] gibt, die Grad < d haben.
Polynome kann man addieren und multiplizieren; die entstehende Struktur Zn [X]
ist wieder ein Ring.
Wenn p eine Primzahl ist, hat der Ring Zp [X] eine wichtige Eigenschaft: eindeutige Division mit Rest.
Fakt 6.4 Sei p eine Primzahl. Wenn f (X), h(X) ∈ Zp [X] Polynome sind mit
deg(h(X)) ≥ 0, dann existieren eindeutig bestimmte Polynome q(X) und r(X)
in Zp [X] mit
(i) f (X) = q(X)h(X) + r(X) und
(ii) deg(r(X)) < deg(h(X)).
(Man kann q(X) und r(X) auch leicht ausrechnen; diese Tatsache benötigen wir
hier aber nicht.) Polynome liefern eine sehr einfache und direkte Möglichkeit,
endliche Körper zu konstruieren. Man benötigt dazu irreduzible Polynome“.
”
Definition 6.5 Ein Polynom h(X) 6≡ 0 heißt irreduzibel (über Zp [X]), wenn in
Zp [X] folgendes gilt:
Wenn h(X) = f (X)g(X) für Polynome f (X), g(X), dann ist deg(f (X)) =
0 oder deg(g(X)) = 0.
(Man kann h(X) nicht in nichttriviale Faktoren zerlegen.)
Man kann aus jedem Polynom f (X) = ak X k + ak−1 X k−1 + · · · + a1 X + a0 mit
ak 6= 0 den Leitkoeffizienten“ ak ausklammern und erhält die Darstellung ak ·
”
fˆ(X), wobei fˆ(X) = X k + âk−1 X k−1 + · · · + â1 X + â0 Leitkoeffizienten 1 hat.
Aus der eindeutigen Division mit Rest folgt ein sehr angenehmer Sachverhalt:
Wie man Zahlen eindeutig in Primfaktoren zerlegen kann, kann man Polynome
eindeutig in irreduzible Faktoren zerlegen.
12
Fakt 6.6 Wenn p Primzahl ist, dann gilt in Zp [X]: Jedes Polynom f (X) mit
deg(f (X)) ≥ 0 besitzt eine (bis auf die Reihenfolge) eindeutig bestimmte Darstellung
f (X) = a · g1 (X) · · · gr (X),
wobei a der Leitkoeffizient von f (X) ist und die gi (X) über Zp [X] irreduzible
Polynome mit Leitkoeffizient 1 sind.
Eine weitere Konsequenz aus der eindeutigen Division mit Rest ist, dass man mit
Hilfe eines irreduziblen Polynoms vom Grad d einen Körper der Kardinalität pd
konstruieren kann.
Definition 6.7 Sei p prim, also Zp ein Körper, und
h(X) = X d + ad−1 X d−1 + · · · + a1 X + a0
ein Polynom über Zp mit Grad d ≥ 2. Die Struktur
Zp [X]/(h(X))
(gelesen Zp [X] modulo h(X)“) entsteht aus Zp [X], indem man Polynome f (X)
”
und g(X) identifiziert, wenn ihre Differenz f (X)−g(X) über Zp [X] ein Vielfaches
von h(X) ist.
Die entstehende Struktur besteht im wesentlichen aus den Polynomen in Zp [X]
vom Grad < d. (Jedes Polynom mit Grad ≥ d ist äquivalent zu einem mit Grad
< d; die Polynome mit Grad < d sind paarweise nicht äquivalent.) Addition erfolgt komponentenweise. Das Produkt f (X)g(X) mod h(X) wird folgendermaßen
gebildet: Nach Fakt 6.4 gibt es eindeutig bestimmte Polynome r(X) und q(X) so
dass
f (X)g(X) = q(X)h(X) + r(X),
mit deg(r(X)) < d. Dann ist r(X) das Produkt von g(X)h(X) modulo h(X).
Fakt 6.8 Wenn p prim ist und h(X) über Zp [X] irreduzibel ist mit deg(h(X)) =
d ≥ 2, dann ist Zp [X]/(h(X)) ein Körper mit Kardinalität pd .
Entscheidend beim Beweis dieses Fakts ist natürlich, dass f (X)g(X) nicht ≡ 0,
also nicht durch h(X) teilbar ist, wenn h(X) weder f (X) noch g(X) teilt. Das ist
eine relativ leichte Konsequenz aus Fakt 6.6 (eindeutige Zerlegbarkeit) und der
Voraussetzung, dass h(X) irreduzibel ist.
Die folgende Eigenschaft von Polynomen über Primzahlkörpern wird später benötigt.
Lemma 6.9 Sei p eine Primzahl. Dann gilt für jedes Polynom f (X) ∈ Zp [X]:
(a) f (X)p ≡ f (X p ) (mod p);
13
j
j
(b) f (X)p ≡ f (X p ) (mod p),
für j ≥ 0 beliebig.
Beweis. (a) Sei f (X) = ak X k + · · · + a1 X + a0 . Setze
X
f (X)p mod p =
bi X i
0≤i≤pk
(Koeffizienten in {0, 1, . . . , p − 1}). Dann gilt nach den bekannten Regeln für die
Exponentiation von Summen (Multinomialformel):
bi =
X
ai00 · · · aikk ·
i0 +···+ik =p
i1 +2i2 +···+kik =i
p!
mod p.
i0 ! · · · ik !
Nun ist die Zahl p!/(i0 ! · · · ik !) durch p teilbar, also ≡ 0 (mod p), wenn nicht
(genau) eines der is gleich p ist und die anderen alle 0. In diesem Fall ist s = i/p
und p!/(i0 ! · · · ik !) = 1. Für i = sp ist also bi = aps mod p = as (wegen Fakt 2.4(b));
wenn p 6 | i, ist bi = 0. Das heißt aber nichts anderes als f (X)p mod p = f (X p ),
wie gewünscht.
(b) folgt aus (a) durch eine simple Induktion.
Ein Polynom, das im folgenden eine große Rolle spielen wird, ist X r −1, für r ≥ 2.
Man erinnert sich, dass
X r − 1 = (X − 1)(X r−1 + X r−2 + · · · + X + 1).
Für spätere Verwendung notieren wir gleich noch die Folgerung
X sr − 1 = (X s − 1)(X s(r−1) + X s(r−2) + · · · + X s + 1),
(3)
d. h. X s − 1 teilt X sr − 1. Dies gilt für Polynome mit Koeffizienten aus Z, also
automatisch in Zp [X] für eine beliebige Primzahl p. Ob und wie der zweite Fakr −1
tor XX−1
weiter in Faktoren zerfällt, hängt von r ab und davon, in welchem Zp
r −1
man rechnet. Wenn r eine Primzahl ist, kennt man die Zerlegung von XX−1
in
irreduzible Faktoren genau:
Lemma 6.10 Seien p und r Primzahlen mit p 6= r. Dann gilt
Xr − 1
= X r−1 + X r−2 + · · · + X + 1 = h1 (X) · · · hs (X),
X −1
wobei h1 (X), . . . , hs (X) in Zp [X] irreduzible Polynome vom Grad ordr (p) sind
(also s = (r − 1)/ordr (p)).
Beweis. Wegen der eindeutigen Zerlegbarkeit in irreduzible Polynome (Fakt 6.6)
genügt es, folgendes zeigen:
14
(∗) Wenn ein irreduzibles Polynom h(X) in Zp [X] ein Teiler von
ist deg(h(X)) = ordr (p).
X r −1
X−1
ist, dann
Sei d = ordr (p) und q(X) = X r−1 + X r−2 + · · · + X + 1. Sei h(X) in Zp [X] ein
irreduzibler Faktor von q(X), mit Grad k ≥ 1. Wir zeigen, dass k = d ist.
≤“: Nach Fakt 6.8 ist F = Zp [X]/(h(X)) ein Körper mit Kardinalität pk . Nach
”
Fakt 6.2 besitzt F ein erzeugendes Element g(X). Wegen Lemma 6.9 gilt in Zp [X]
(und damit erst recht in F):
d
d
g(X)p = g(X p ).
(4)
Nun ist X r − 1 ein Vielfaches von h(X), also ist in F = Zp [X]/(h(X)) X r = 1.
Weil d = ordr (p), gilt pd ≡ 1 (mod r), also pd = mr + 1 für eine Zahl m. Damit
d
ist X p = X mr+1 = X in F, und (4) liefert
d
d
d −1
g(X)p = g(X p ) = g(X) , also g(X)p
= 1 in F.
(5)
Nach Fakt 2.2(b) heißt dies, dass pd − 1 ein Vielfaches der Ordnung pk − 1 von
g(X) in F sein muss, also ist k ≤ d.
≥“: Im Körper F gilt X r = 1. Weil r eine Primzahl ist, hat X Ordnung r in F∗ ;
”
Nach Fakt 2.2(a)(i) ist r Teiler von |F∗ | = pk −1. Das heißt aber pk ≡ 1 (mod r),
woraus wieder mit Fakt 2.2(b) folgt, dass k ein Vielfaches von d = ordr (p) ist.
7
Der Hauptsatz und der Korrektheitsbeweis
Der Kern des Korrektheitsbeweises des Agrawal/Kayal/Saxena-Tests ist im folgenden Satz zusammengefasst, dessen Formulierung und Beweis von
D. G. Bernstein [6] gegeben wurde, auf der Basis von [3] natürlich. Wir beweisen
zunächst diesen Satz, um schließlich die Korrektheit des Algorithmus zu folgern.
Hauptsatz 7.1 Es sei
(α) n ≥ 2 eine natürliche Zahl;
(β) r < n eine Primzahl mit r 6 | n;
√
(γ) q eine Primzahl mit q | (r − 1), und q ≥ 4 r log n, und
(δ) n(r−1)/q 6≡ 1
(mod n).
√
Weiter gelte für L = b2 r log nc:
(ε) ∀a, 1 ≤ a ≤ L : a ⊥ n;
15
(ζ) ∀a, 1 ≤ a ≤ L : (X + a)n ≡ (X n + a)
(mod n, X r − 1).
Dann ist n = pi für eine Primzahl p und ein i ≥ 1.
Beweis.
Lemma 7.2 n besitzt einen Primfaktor p mit q | ordr (p).
Beweis. Nach (δ) gilt
n(r−1)/q 6≡ 1
(mod r).
Daraus folgt, dass n einen Primfaktor p haben muss, der
p(r−1)/q 6≡ 1
(mod r)
erfüllt. (Würden alle Primfaktoren p von n die Kongruenz p(r−1)/q ≡ 1 (mod r)
erfüllen, dann würde durch Multiplikation n(r−1)/q ≡ 1 (mod r) folgen.) Wegen
(β) haben wir r 6 | n, und aus (γ) folgt q 2 > r − 1, also q 6 | (r − 1)/q. Daher können
wir Fakt 2.6(b) anwenden, was q | ordr (p) ergibt.
Wir werden viel mit diesem Primteiler p von n und den zugehörigen Strukturen
Zp und Zp [X] arbeiten. Wenn p = n ist, ist nichts weiter zu zeigen. Wir können
also für das folgende p ≤ 12 n annehmen.
Wegen (ε) gilt: ∀a, a0 , 1 ≤ a 6= a0 ≤ L : p 6 | a − a0 . Daraus folgt, dass 1, 2, . . . , L in
Zp verschieden sind und dass die linearen Polynome
X + a, 1 ≤ a ≤ L,
in Zp [X] alle verschieden sind. Wir betrachten Potenzen dieser Terme (und später
Produkte dieser Potenzen). Aus Bedingung (ζ) im Hauptsatz erhält man leicht
(weil p Teiler von n ist):
Lemma 7.3 ∀a, 1 ≤ a ≤ L : (X + a)n ≡ (X n + a)
(mod p, X r − 1).
Beweis. Wegen (ζ) wissen wir
∀a, 1 ≤ a ≤ L : (X + a)n ≡ (X n + a)
(mod n, X r − 1).
Das heißt, dass es Polynome f (X) und g(X) mit ganzzahligen Koeffizienten gibt,
derart dass über Z[X]
(X + a)n − (X n + a) = (X r − 1) · f (X) + ng(X)
gilt. Weil p | n, folgt
(X + a)n − (X n + a) = (X r − 1) · f (X) + p(n/p)g(X),
also (X + a)n ≡ (X n + a) (mod p, X r − 1).
Wir können dieses Lemma auf Exponenten der Form ni verallgemeinern:
16
Lemma 7.4 Für 1 ≤ a ≤ L und i ≥ 0 gilt:
i
i
(X + a)n ≡ (X n + a)
(mod p, X r − 1).
Beweis. Sei ≤ a ≤ L fest. Wir benutzen vollständige Induktion. Für i = 0 ist
die Aussage trivial. Sei nun also i ≥ 0 beliebig und gelte die Aussage des Lemmas
für i. Nach Lemma 7.3 gilt (X + a)n ≡ (X n + a) (mod p, X r − 1), d. h. es gibt
f (X), g(X) ∈ Z[X] mit
(X + a)n − (X n + a) = (X r − 1)f (X) + pg(X).
i
Für X setzen wir X n ein und erhalten
i
i
i
i
i
(X n + a)n − ((X n )n + a) = ((X rn ) − 1)f (X n ) + pg(X n ).
i
Weil X r − 1 ein Teiler von X rn − 1 ist (vgl. (3)), erhalten wir
i
i+1
(X n + a)n ≡ (X n
(mod p, X r − 1).
+ a)
Andererseits folgt aus der Induktionsvoraussetzung, dass
i+1
(X + a)n
i
i
= ((X + a)n )n ≡ (X n + a)n
(mod p, X r − 1).
Mit der Transitivität von ≡ folgt die Induktionsbehauptung
i+1
(X + a)n
i+1
≡ (X n
+ a)
(mod p, X r − 1).
Lemma 7.5 Für 1 ≤ a ≤ L und i ≥ 0 gilt:
i j
i j
(X + a)n p ≡ (X n p + a)
(mod p, X r − 1).
Beweis. Sei ≤ a ≤ L fest. Nach Lemma 7.4 gibt es ein Polynom f (X) ∈ Z[X]
mit
i
i
(X + a)n ≡ (X n + a) + (X r − 1)f (X) (mod p).
Wir wenden Lemma 6.9(b) an und erhalten
i j
i
j
j ni
(X+a)n p ≡ ((X n +a)+(X r −1)f (X))p ≡ (X p
j
j
+a)+(X p r −1)f (X p )
(mod p).
j
Weil X r − 1 ein Teiler von X p r − 1 ist (vgl. (3)), folgt die Behauptung.
Wegen Fakt 6.10 gibt es ein über Zp [X] irreduzibles Polynom h(X) vom Grad
d = ordr (p), das X r−1 + · · · + X + 1 und damit X r − 1 teilt. Folgendes ist also
eine Abschwächung von Lemma 7.5:
i j
i j
Für 1 ≤ a ≤ L und i, j ≥ 0 gilt: (X + a)n p ≡ (X n p + a)
17
(mod p, h(X)). (6)
Im folgenden betrachten wir die Struktur F = Zp [X]/(h(X)), die nach Fakt 6.8
ein Körper ist. Gleichung (6) bedeutet dann einfach:
i j
i j
Für 1 ≤ a ≤ L und i, j ≥ 0 gilt in F: (X + a)n p = X n p + a.
(7)
√
Wir betrachten nun alle Paare (i, j), 0 ≤ i, j ≤ b rc. Das sind > r viele Paare,
also muss es nach dem Schubfachprinzip zwei verschiedene Paare (i, j) und (k, l)
in diesem Bereich geben, die
ni pj ≡ nk pl
(mod r)
erfüllen. Wir halten diese Paare fest und definieren
t = ni pj ;
u = nk pl .
Nach (7) gilt also in F für 1 ≤ a ≤ L:
(X + a)t = X t + a und (X + a)u = X u + a,
(8)
und nach der Definition von t und u gilt
√
1 ≤ t, u ≤ n r p
√
r
√
≤ (n2 /2)
r
1 √
< n2 r .
2
(9)
Nun betrachten wir die Untergruppe G von F∗ , die von den L verschiedenen
Elementen X + a, 1 ≤ a ≤ L, erzeugt wird (Rechnung in F):
n Y
o
G=
(X + a)βa βa ≥ 0 für 1 ≤ a ≤ L .
1≤a≤L
Unser erstes Ziel ist es, eine untere Schranke für die Kardinalität von G zu beweisen.
Lemma 7.6
1 √
|G| > (d/L)L > n2 r .
2
Beweis.
(αa )1≤a≤L und (αa0 )1≤a≤L verschieden sind und
P Wenn
0
und 1≤a≤L αa < d, dann sind die Polynome
Y
Y
0
(X + a)αa und
(X + a)αa
1≤a≤L
P
1≤a≤L
αa < d
1≤a≤L
über Zp [X] verschieden (verschiedene Nullstellenmengen, wenn man die Vielfachheiten einbezieht), aber auch über Zp [X]/(h(X)) (die Reduktion modulo h(X)
bleibt ohne Effekt, da der Grad der Polynome < d = deg(h(X)) ist). Das heißt,
dass die Elemente
Y
X
(X + a)αa ,
αa < d,
1≤a≤L
1≤a≤L
18
in G verschieden sind. Daher ist
n
X
o d − 1 + L d L
|G| ≥ (αa )1≤a≤L αa < d =
>
.
L
L
1≤a≤L
√
Nun ist d = ordr (p) ≥ q (nach Lemma 7.2) und q ≥ 4 r log n (nach (γ)); wegen
der Definition von L gilt also d/L ≥ 2 und
(d/L)L ≥ 2L = 2b2
√
r log nc
1 √
> n2 r ,
2
wie behauptet.
Nach Fakt 6.2 ist F∗ eine zyklische Gruppe; nach Fakt 2.2(c) ist dann auch G
zyklisch. Es sei
Y
g(X) =
(X + a)γa mod (p, h(X))
1≤a≤L
(gerechnet in F, also modulo (p, h(X))) ein erzeugendes Element von G. (Man
beachte, dass die Exponenten γa hierbei keiner Einschränkung unterliegen.) Nun
gilt nach (8) für jedes a, 1 ≤ a ≤ L:
Y
t
Y
Y
t
γa
(X + a)tγa =
(X t + a)γa = g(X t ) (10)
g(X) =
(X + a)
=
1≤a≤L
1≤a≤L
1≤a≤L
und analog
g(X)u = g(X u )
(11)
(jeweils gerechnet in F). Nach Wahl von t und u ist t ≡ u (mod r), also ist
X u ≡ X t (mod X r − 1). Weil h(X) über Zp ein Teiler von X r − 1 ist, folgt
Xt ≡ Xu
(mod p, h(X)).
Das heißt gerade, dass in F X u = X t gilt. Wenn wir dies in (10) und (11)
einsetzen und beide kombinieren, ergibt sich
g(X)t = g(X)u
(gerechnet in F, also in der Untergruppe G von F∗ ). Nach (9) und Lemma 7.6
haben wir
1 √
1 ≤ t, u < n2 r < |G|.
2
Weil g(X) die zyklische Gruppe G erzeugt, gilt nach Fakt 2.2(b), dass t = u ist,
also
ni pj = nk pl .
(12)
Annahme: n hat einen Primfaktor p̂, p̂ 6= p.
Dann schreiben wir n = p̂λ n̂, mit λ ≥ 1, wobei p̂ 6 | n̂. Dann folgt wegen der eindeutigen Primfaktorzerlegung aus (12) iλ = kλ, also i = k, und durch nochmalige
Anwendung von (12) schließlich j = l. Dies widerspricht der Wahl von (i, j), (k, l)
als verschiedene Paare.
19
Also ist die Annahme falsch, und p ist der einzige Primteiler von n, d. h. n ist
Potenz von p. Dies beendet den Beweis des Hauptssatzes 7.1.
Mit Hilfe des Hauptsatzes können wir nun beweisen, dass die Ausgabe des Algorithmus aus Abschnitt 4 korrekt ist.
Satz 7.7 Der Algorithmus gibt PRIM“ aus ⇔ n ist eine Primzahl.
”
Beweis. ⇐“: Wenn n eine Primzahl ist, dann ist n nicht von der Form ab ,
”
b > 1, also tritt die Bedingung in Zeile 1 nie ein. Die Tests in Zeile 3 ergeben
immer ggT(n, r) = 1. Ganz gleichgültig, ob die Schleife in Zeilen 3–11 endet, weil
r eine Primzahl enthält, die die Tests in Zeilen 7 und 8 besteht oder weil r = n
wird: wegen Lemma 3.1 kann für kein a mit n 6 | a der Test in Zeile 13 erfüllt sein;
für n | a gilt dies auch, weil dann a ≡ 0 (mod n) ist. Also wird Zeile 15 erreicht
und PRIM“ ausgegeben.
”
⇒“: Wir zeigen, dass n eine Primzahl ist, wenn der Algorithmus (in Zeile 15)
”
PRIM“ ausgibt.
”
Fall 1: Die Schleife in Zeilen 3–11 wird bis zum Ende durchlaufen, d. h. nach
Verlassen der Schleife steht in der Variablen r die Zahl n. Nun gilt wegen des
Tests in Zeile 3 für jedes r < n, dass r ⊥ n, insbesondere r 6 | n, also ist n eine
Primzahl.
Fall 2: Die Schleife in Zeilen 3–11 wird über das break“-Kommando in Zeile 9
”
verlassen. Der Inhalt von r in diesem Moment sei r. Nun sieht man folgendes:
(β) r < n und r ist eine Primzahl (getestet in Zeile 5);
√
(γ) der größte Primfaktor q von r erfüllt q ≥ 4 r log n (getestet in Zeile 7);
(δ) n(r−1)/q 6≡ 1
(mod r) (getestet in Zeile 8);
√
Für alle a, 1 ≤ a ≤ L = b2 r log nc gilt:
√
(ε) a ⊥ n (wegen Zeile 7 ist L < 4 r log n ≤ q < r, also wurde für alle diese a
in den vorherigen Schleifendurchläufen in Zeile 4 getestet, ob ggT(n, a) 6= 1
ist) und
(ζ)
(X + a)n − (X n + a) ≡ 0
(mod X r − 1, n)
(getestet in der Schleife in Zeilen 12–14).
Damit erfüllen n, r und q alle Voraussetzungen des Hauptsatzes 7.1. Nach diesem
Satz ist also n = pi für eine Primzahl p. Wegen des Tests in Zeile 1 kann aber
n nicht echte Potenz irgendeiner Zahl sein, also ist i = 1 und n ist selbst eine
Primzahl.
20
Literatur
[1] L. M. Adleman und M.-D. Huang, Primality Testing and Two-Dimensional
Abelian Varieties over Finite Fields, Lecture Notes in Mathematics 1512,
Springer-Verlag, Berlin, 1992.
[2] L. M. Adleman, C. Pomerance und R. S. Rumley, On distinguishing prime
numbers from composite numbers, Ann. Math. 117 (1983) 173–206.
[3] Manindra Agrawal, Neeraj Kayal und Nitin Saxena, PRIMES is in P, Manuscript, 2002. http://www.cse.iitk.ac.in/users/manindra/primality.ps
oder http://www.cse.iitk.ac.in/news/primality.pdf
[4] T. M. Apostol, Introduction to Analytic Number Theory, Springer-Verlag,
New York, 1997.
[5] R. C. Baker und G. Harman, The Brun-Titchmarsh theorem on average,
in: B. C. Berndt et al., Eds., Analytic Number Theory: Proceedings of a
conference in Honor of Heini Halberstam, Volume 1, Birkhäuser, Boston,
1996, pp. 39–103.
[6] Daniel J. Bernstein, An exposition of the Agrawal-Kayal-Saxena primalityproving theorem, Manuscript, 2002. http://cr.yp.to/papers/aks.ps
[7] E. Fouvry, Theoreme de Brun-Titchmarsh; application au theoreme de Fermat. Invent. Math. 79 (1985) 383–407.
[8] Neil Koblitz, A Course in Number Theory and Cryptography, Second Edition,
Springer-Verlag, New York, 1994.
[9] R. Lidl und H. Niederreiter, Introduction to finite fields and their applications, Cambridge University Press, 1986.
[10] G. L. Miller, Riemann’s hypothesis and tests for primality, J. Comput. Syst.
Sci. 13 (1976) 300–317.
[11] Probabilistic algorithm for testing primality, J. Number Theory 12 (1980)
128–138.
[12] A. Steger, Diskrete Strukturen, Band 1, Kombinatorik – Graphentheorie –
Algebra, Springer-Verlag, Berlin, 2001.
[13] R. Solovay und V. Strassen, A fast Monte-Carlo test for primality, J. Number
Theory 12 (1980) 128–138.
[14] I. Wegener, Effiziente Algorithmen für grundlegende Funktionen, B. G. Teubner, Stuttgart, 1996.
[15] Websites: http://mathworld.wolfram.com/news/2002-08-07 primetest/
http://mathworld.wolfram.com/PrimalityTest.html
21
A
Primitive Elemente
In diesem Anhang geben wir einen direkten Beweis für die Aussage an, dass in
jedem endlichen Körper die multiplikative Gruppe zyklisch ist (Fakt 6.2, der Satz
vom primitiven Element).
Folgendes ist wohlbekannt, und ist eine unmittelbare Konsequenz der Division
mit Rest für Polynome über endlichen Körpern.
Fakt A.1 Wenn F ein beliebiger Körper ist und f (X) ∈ F[X] ein Polynom vom
Grad d ≥ 1 ist, dann hat f (X) in F höchstens d Nullstellen, d. h.
|{a ∈ F | f (a) = 0}| ≤ d.
Definition A.2 ϕ(n) = |{i | 1 ≤ i ≤ n, i ⊥ n}|, für n ≥ 1.
( Eulersche ϕ-Funktion).
Fakt A.3 Für jedes n ∈ N gilt: n =
P
d|n
ϕ(d).
Erläuterung: Wir erklären diese Aussage mit einem konkreten Beispiel. Wir
betrachten die 12 Brüche mit Nenner 12 und Zähler in {1, . . . , 12}:
1 2 3 4 5 6 7 8 9 10 11 12
, , , , , , , , , , , .
12 12 12 12 12 12 12 12 12 12 12 12
Nun kürzen wir diese Brüche, soweit möglich:
1 1 1 1 5 1 7 2 3 5 11 1
, , , , , , , , , , , .
12 6 4 3 12 2 12 3 4 6 12 1
und sortieren sie nach den Nennern:
1
;
1
1
;
2
1 2
, ;
3 3
1 3
, ;
4 4
1 5
, ;
6 6
1 5 7 11
, , , .
12 12 12 12
Man sieht sofort, dass als Nenner genau die Teiler 1, 2, 3, 4, 6, 12 von 12 auftreten,
und dass es für den Teiler d von 12 genau ϕ(d) viele Brüche mit Nenner d gibt,
nämlich genau die mit Zähler i, 1 ≤ i ≤ d, die zu d teilerfremd sind. Also gilt
ϕ(1) + ϕ(2) + ϕ(3) + ϕ(4) + ϕ(6) + ϕ(12) = 12.
Es ist offensichtlich, dass genau dieselbe Überlegung für jede Zahl n genauso
durchgeführt werden kann, und dass man so einen Beweis für Fakt A.3 erhält.
Nun wenden wir uns dem Beweis von Fakt 6.2 zu, der wie folgt lautet:
Fakt A.4 Wenn F ein endlicher Körper ist, dann ist die multiplikative Gruppe
F∗ zyklisch — das heißt, es gibt ein primitives Element“ z in F∗ mit F∗ =
”
{1, z, z 2 , . . . , z |F|−2 }.
22
Beweis. Sei q die Kardinalität von F. Dann gilt |F∗ | = q − 1.
Teil 1: Es sei d ein beliebiger Teiler von q − 1, und es sei a ∈ F∗ ein beliebiges
Element mit ordF (a) = d.
Betrachte nun hai = {a0 , a1 , . . . , ad−1 } und Bd = {b ∈ F | ordF (b) = d}.
Nach Fakt 2.2(b) sind die d Elemente in hai verschieden, und für jedes i, 0 ≤ i < d,
gilt (ai )d = (ad )i = 1. Also sind die d Elemente von hai Nullstellen des Polynoms
X d − 1 in F. Nach Fakt A.1 folgt, dass hai genau die Nullstellen dieses Polynoms
enthält. Also gilt Bd ⊆ hai.
Welche Elemente ai haben aber nun genau Ordnung d (in Bd und in F), erfüllen
also ai , (ai )2 , . . . , (ai )d−1 6= 1? Nach Fakt 2.2(b) gilt dies für diejenigen i, für die
alle Zahlen i, 2i, 3i, . . . , (d − 1)i nicht durch d teilbar sind. Das gilt genau dann,
wenn i und d teilerfremd sind. Also ist
Bd = {ai | 1 ≤ i ≤ d, i ⊥ d}.
Damit erhalten wir, dass |Bd | = ϕ(d) — gesetzt den Fall, dass Bd 6= ∅. Mit
anderen Worten: Für jeden Teiler d von q − 1 ist |Bd | ∈ {0, ϕ(d)}.
Teil 2: Nach Fakt 2.2(a)(i) bilden die Mengen Bd , d | q − 1, eine Partitionierung
von F∗ . Also gilt:
X
q − 1 = |F∗ | =
|Bd |.
(13)
d | q−1
Wenn wir Fakt A.3 für n = q − 1 anwenden, erhalten wir
X
q−1=
ϕ(d).
d | q−1
(14)
Wenn man (13) und (14) mit der Eigenschaft |Bd | ∈ {0, ϕ(d)} (für alle Teiler d
von q − 1) kombiniert, sieht man, dass in Wirklichkeit keines der Bd leer sein
kann. Insbesondere ist Bq−1 6= ∅, und jedes der ϕ(q − 1) Elemente von Bq−1 ist
ein primitives Element von F.
23
Herunterladen