Primzahlen/Primzahltests

Werbung
aus der Übersetzung von Maser (1889)
Dass die Aufgabe, die Primzahlen von den zusammengesetzten zu
unterscheiden und letztere in ihre Primfactoren zu zerlegen, zu den
wichtigsten und nützlichsten der gesamten Arithmetik gehört und die
Bemühungen und den Scharfsinn sowohl der alten als auch der
neueren Geometer in Anspruch genommen hat, ist so bekannt, dass es
überflüssig wäre, hierüber viele Worte zu verlieren. [. . . ] ausserdem
dürfte es die Würde der Wissenschaft erheischen, alle Hülfsmittel zur
Lösung jenes so eleganten und berühmten Problems fleissig zu
vervollkommnen.
Problema, numeros primos a compositis dignoscendi . . . ad gravissima
ac utilissima tabus arithmeticae pertinere. . .
. . . scientiae dignitas requirere videtur, ut omnia subsidia ad
solutionem problematis tam elegantis ac celebris sedulo excolantur.
J. C. F. Gauss (1777–1855), Disquisitiones Arithmeticae, Artikel 329
Trotzdem muss man gestehen, dass alle bisher angegebenen Methoden
entweder auf sehr specielle Fälle beschänkt oder so mühsam und
weitläufig sind, dass sie [. . . ] auf grössere Zahlen aber meistenteils
kaum angewendet werden können.
1
K. Gödel (Brief an J. von Neumann, 1956)
2
Häufigkeit von Primzahlen
Wenn es eine Maschine mit ... gäbe, hätte das Folgerungen von der
grössten Tragweite. Es würde offenbar bedeuten, dass man trotz der
Unlösbarkeit des Entscheidungsproblems die Denkarbeit der
Mathematiker bei ja-oder-nein-Fragen vollständig (abgesehen von der
Aufstellung der Axiome) durch Maschinen ersetzen könnte.
• Primzahlsatz
... bedeutet, dass die Anzahl der Schritte gegenüber dem
blossen Probieren von N auf log N verringert werden kann. So starke
Verringerungen kommen aber bei anderen finiten Problemen durchaus
vor, z.B. bei der Berechnung eines quadratischen Restsymbols durch
wiederholte Anwendung des Reziprozitätsgesetzes. Es wäre interessant
zu wissen, wie es damit z.B. bei der Feststellung, ob eine Zahl
Primzahl ist, steht und wie stark im allgemeinen bei finiten
kombinatorischen Problemen die Anzahl der Schritte gegenüber dem
blossen Probieren verringert werden kann.
• “Bertrands Postulat”
3
lim
n→∞
]{p ≤ n ; p Primzahl}
=1
n/ ln(n)
d.h. ]{p ≤ n ; p Primzahl} ∼
n
ln n
Für jedes n ∈ Z>1 enthält das Intervall [n + 1 . . . 2n − 1] mindestens eine
Primzahl
4
Primzahltests
Pseudo-Primzahltests
• Probedivision: n ist Primzahl ⇔
∀i(2 ≤ i ≤
√
• Sei A(n, a) eine Eigenschaft ganzer Zahlen mit
n) : i 6 |n
n Primzahl ⇒ ∀a (1 < a < n) : A(n, a)
is prime (int n)
{
for (int i = 2; i ≤
Wird w (1 < w < n) gefunden mit ¬A(n, w), so ist n keine Primzahl:
√
n; i++)
∃w (1 < w < n) : ¬A(n, w) ⇒ n ist keine Primzahl
if (i | n) return FALSE;
return TRUE;
Solch ein w heisst Zeuge (witness) für die Zusammengesetztheit von n
}
• Beispiel: Teilbarkeitstest
logarithmisches Kostenmodell:
D(n, a) : a 6 | n
– input-Grösse ist log n
√
1
– Anzahl der Schleifendurchläufe ist O( n) = O(2 2 log n )
• Beispiel: Euklid-Test
E(n, a) : ggT(n, a) = 1
– Jede Probedivision erfordert O(log2 n) Bit-Operationen
– Laufzeit für m-stelliges n ist im worst-case O(m2 · 2m/2 )
• Beispiel: Fermat-Test
F (n, a) : ggT(n, a) = 1 ⇒ an−1 ≡ 1 (mod n)
5
6
• Beispiel: SPP-Test (“strong probable prime”)
• Gelingt es trotz intensiver Bemühungen nicht, einen Zeugen für die
Zusammengesetztheit von n aufzutreiben, wird man n für eine Primzahl halten
M R(n, a) : sei n − 1 = 2t · u mit ungeradem u

au ≡ 1 mod n
oder
i
au·2 ≡ −1 mod n für ein i mit 0 ≤ i < t
• Unter den Annahmen
– für n, a mit 1 < a < n ist die Un/Gültigkeit von A(n, a) leicht zu überprüfen
– ist n keine Primzahl, so sind Zeugen für die Zusammengesetztheit von n
häufig
– Begründung
∗ n Primzahl ⇔ Zn Körper
∗ In einem Körper hat die Gleichung x2 = 1 genau zwei Lösungen
x = ±1
(allgemeiner: x2 = 1 hat für n = pe (p ≥ 3 Primzahl) in Zn genau
die beiden Lösungen x = ±1)
∗ wird in Z∗n ein Element z 6= ±1 mit z 2 = 1 gefunden, so ist n keine
Primzahl
kann man so verfahren
– wähle zufällig Kandidaten k1 , k2 , . . . , kr mit 1 < ki < n und überprüfe
A(n, ki )(1 ≤ i ≤ r)
– wird dabei mindestens ein Zeuge für die Zusammengesetztheit von n
gefunden, d.h. ¬A(n, ki ), so ist n in der Tat zusammengesetzt
– wird kein Zeuge für die Zusammengesetztheit von n gefunden, so wird n als
Primzahl deklariert — dies ist mit nur sehr geringer Wahrscheinlichkeit eine
falsche Entscheidung
– beachte sukzessive Quadrierungen
au mod n , a2u mod n , a2
2
u
mod n , a2
7
3
u
mod n , . . . , a2
t
u
mod n
8
Diskussion der Beispiele
• Teilbarkeitstest
Unbrauchbar, da es Nicht-Primzahlen n mit nur zwei Teilern (6= 1, n) gibt
(Teilbarkeits-Zeugen)
• Euklid-Test
Unbrauchbar, da es Nicht-Primzahlen n mit nur wenigen Euklid-Zeugen
gibt
• Fermat-Test
• Der Primzahltest von Miller-Rabin — Strategie
– wähle (iteriert und zufällig) Zahlen a ∈ Zn , a 6= {0, 1}, mit
ggT(n, a) = 1
(falls a mit ggT(n, a) 6= 1: sowieso fertig)
– berechne an−1 mod n durch iteriertes Quadrieren und Multiplizieren:
j
a(n−1) div 2 für j = k, k − 1, k − 2, . . . , 1, 0, wobei k = `(n − 1) + 1
– falls auf diesem Weg eine Situation z 7→ z 2 = 1 mit z 6= ±1 angetroffen
wird: Zeuge für Zusammengesetztheit von n gefunden
Unbrauchbar, da es zusammengesetzte Zahlen n gibt mit
∀1 < a < n : ggT(n, a) = 1 ⇒ an−1 ≡ 1(mod n)
d.h. alle Fermat-Zeugen sind schon Euklid-Zeugen
10
9
Miller Rabin (int n)
{
choose a ∈ [2 : n − 1] at random;
/* primes are odd except for 2, which is an odd prime :-) */
if (n == 2) return TRUE;
if (n == 1 || even(n)) return FALSE;
/* primes are relatively prime to a */
if (ggT(a, n) > 1) return FALSE;
/* compute z = an−1 #= 1 mod n using iterated squaring */
let (bk , . . . , b0 ) be the binary representation of n − 1;
int z = 1;
for (int i = k; i ≥ 0; i−−)
{
int x = z;
z = z 2 mod n;
/* primes allow only trivial solutions of x2 ≡ 1 mod p */
if ((z == 1) && (x #= 1) && (x #= n − 1)) return FALSE;
if (bi == 1) z = z · a mod n;
}
if (z #= 1 mod n) return FALSE;
/* z = an−1 */
return TRUE;
/* no witness found: in dubio pro reo */
}
11
Beachte:
ist n − 1 = 2t · u mit ungeradem u, so sind die letzten t + 1 Werte von z beim
Quadrieren und Multiplizieren
au mod n , a2u mod n , a2
2
u
mod n , a2
3
u
mod n , . . . , a2
und die letzten t Operationen sind nur Quadrierungen
12
t
u
mod n
Lemma:
Miller-Rabin-Zeugen sind häufig,
genauer:
ist n eine zusammengesetzte Zahl, so ist die Anzahl der
Miller-Rabin-Zeugen für diese Tatsache mindestens (n − 1)/2
• der einfache Fall: es gibt in Z∗n einen Fermat-Zeugen,
d.h. ein x ∈ Z∗n mit xn−1 ≡
6 1 mod n
zu diesem Zweck wird gezeigt:
• Nicht-Zeugen sind Elemente von Z∗n (klar!)
– B = {b ∈ Z∗n ; bn−1 ≡ 1 mod n} ist eine Untergruppe von Z∗n
• Die Menge der Nicht-Zeugen ist eine echte Untergruppe von Z∗n
– alle Nicht-Zeugen gehören zu B
• Wegen des Satzes von Lagrange hat diese Untergruppe
≤ ]Z∗n /2 ≤ (n − 1)/2 Elemente
– wegen x ∈
/ B ist B eine echte Untergruppe von Z∗n
• es gilt sogar (Beweis etwas aufwendiger):
die Untergruppe der Nicht-Zeugen hat ≤ ϕ(n)/4 Elemente
13
• der weniger einfache Fall: es gibt in Z∗n keine Fermat-Zeugen,
d.h. xn−1 ≡1 mod n für alle x ∈ Z∗n
– der einfache Unter-Fall des etwas weniger einfachen Falles:
n = pe mit Primzahl p > 2 und e > 2
∗ Fakt: Z∗pe ist eine zyklische Gruppe
∗ ]Z∗pe = ϕ(pe ) = pe−1 (p − 1)
∗ Ist a ∈ Z∗pe ein Element der Ordnung ϕ(pe ), so gilt
e
aϕ(p ) ≡ 1 (mod n) und an−1 ≡ 1 (mod n),
also ϕ(pe ) = pe−1 (p − 1) | pe − 1 : unmöglich!
15
14
– der etwas weniger einfache Unter-Fall des etwas weniger einfachen
Falles:
n = n1 · n2 mit n1 , n2 > 1 und ggT(n1 , n2 ) = 1
∗ n − 1 = 2t · u mit ungeradem u, für a ∈ Z∗n betrachte
[a] = hau mod n , a2u mod n , a2
2
u
mod n , a2
3
u
mod n , . . . , a2
t
u
mod ni
∗ beachte: die letzte Komponente von [a] ist immer = 1;
∗ sei j mit 0 ≤ j < t maximal mit der Eigenschaft, dass es ein v ∈ Z∗n
j
gibt v 2 u ≡ −1 mod n
j
∗ B = {x ∈ Z∗n ; x2 u ≡ ±1 mod n} =
6 ∅
∗
∗ B ist eine Untergruppe von Zn , die alle Nicht-Zeugen enthält
∗ B ist eine echte Untergruppe von Z∗n :
j
· sei v ∈ Z∗n mit v 2 u ≡ −1 mod n
j
j
· ⇒ v 2 u ≡ −1 mod n1 und v 2 u ≡ −1 mod n2
· Konstruiere mittels Chinesischem Restesatz w ∈ Z∗n mit
w ≡ v mod n1 und w ≡ 1 mod n2
j
j
· ⇒ w2 u ≡ −1 mod n1 und w2 u ≡ 1 mod n2 ⇒ w ∈
/B
16
Ein wesentlich schwieriger darzustellendes und zu begründendes Verfahren
von Adleman und Huang (1992) zeigt
Theorem (Miller, Rabin, 1976)
Der Miller-Rabin-Primzahltest beurteilt bei m Iterationen eine
zusammengesetzte Zahl n fälschlicherweise als Primzahl mit einer
Wahrscheinlichkeit < (1/2)m bei einer Laufzeit von O(m · `(n)3 )
Primes ∈ RP
Aus beiden Aussagen zusammen erhält man
In der Terminologie der Komplexitätstheorie
Primes ∈ co-RP
wobei:
RP = random polynomial time
= Klasse der Probleme mit effizienten probabilistischen
Entscheidungsverfahren mit einseitigem Fehler
(“biased Monte Carlo”)
Primes ∈ ZPP = RP ∩ co-RP
wobei:
ZPP = random polynomial time
= Klasse der Probleme mit probabilistischen Entscheidungsverfahren,
die im Mittel effizient sind
(“Las Vegas”)
17
Weitere Informationen zur Komplexitätssituation für Primes
• Primzahlen sind effizient verifizierbar (Pratt, 1975)
18
• Im August 2002 wurde von Agrawal, Kayal, Saxena das lange offene
Problem endlich gelöst:
Primes ∈ NP
• Zusammen mit dem offensichtlichen (!!) Primes ∈ co-NP ergibt sich
Primes ∈ NP ∩ co-NP
• Miller hat 1976 gezeigt, dass Primzahlen deterministisch mit Aufwand
O(log5 n) erkannt werden können, denn
ist n keine Primzahl, dann ist kleinste MR-Zeuge für die
Zusammengesetztheit von n kleiner als 2 ln2 n
(Bach, 1985)
Hierbei wird allerdings eine bislang unbewiesene Hypothese des
Zahlentheorie (ERH) verwendet!
• Es gibt einen (in der Praxis!!) sehr effizienten deterministischen
Primzahltest von Adelman, Pomerance, Rumeley (1983) mit Laufzeit
Primes ∈ P
Der AKS-Algorithmus
– ist verblüffend einfach (⇒ folgende Seite)
– die Begründung der Korrektheit ist nicht ganz so einfach, aber
interessierten Studenten durchaus zugänglich
– hat eine (bewiesene!) Laufzeit O(log12 n)
(aber vermutlich real noch deutlich besser)
• Hinweis: sehr instruktiver Artikel mit vielen weiteren Hinweisen
F. Bornemann, Primes is in P: Ein Durchbruch für “Jedermann”,
Mitteilungen der Deutschen Mathematiker-Vereinigung, 4-2002, 14–21.
engl. Übersetzung: Primes is in P: A Breakthrough for “Everyman”,
Notices of the American Mathematical Society 50/5 (2003), 545–552.
O((log n)c. log log log n )
19
20
Der Algorithmus von Agrawal, Kayal, Saxena
Input: integer n > 1
if n = ab for a ∈ N and b > 1 then
output COMPOSITE
end if
Find the smallest r such that ordr (n) > 4 log2 n
if 1 < (a, n) < n for some a ≤ r then
output COMPOSITE
end if
if n ≤ r then
output PRIME
end if
p
for a = 1 to b2 ϕ(r) log nc do
if (X + a)n 6= X n + a (mod X r − 1, n) then
output COMPOSITE
end if
end for
output PRIME
21
• Literaturhinweis:
R. Crandall, C. Pomerance,
Prime Numbers, A Computational Perspective
Springer-Verlag, 2001.
• siehe auch Webseite zur Vorlesung
22
Herunterladen