58
Kapitel 3: Zahlen-theoretische Algorithmen (Effiziente Algorithmen, WS 2019) Gerhard Woeginger WS 2019, RWTH EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 1/58

Kapitel 3: Zahlen-theoretische Algorithmen

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Kapitel 3: Zahlen-theoretische Algorithmen

(Effiziente Algorithmen, WS 2019)

Gerhard Woeginger

WS 2019, RWTH

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 1/58

Organisatorisches

Nachste Vorlesung:

Dienstag, Oktober 29, 16:30–18:00 Uhr, AH V

Keine Vorlesung am Oktober 24

Webseite:

https://algo.rwth-aachen.de/Lehre/WS1920/EA/EA.py

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 2/58

Zahlen-theoretische Algorithmen

Der Euklidische Algorithmus

Der erweiterte Euklidische Algorithmus

Der Chinesische Restsatz

Modulare Potenzfunktion

Primzahltest

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 3/58

Zum Aufwarmen:

Der Euklidische Algorithmus

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 4/58

Der Euklidische Algorithmus

Euklidischer Algorithmus:

1 function Euklid(a,b): integer

2 if b==0 then return a

3 else return Euklid(b, a mod b)

Euklid(33, 39) = Euklid(39, 33)

= Euklid(33, 6)

= Euklid(6, 3)

= Euklid(3, 0)

= 3

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 5/58

Analyse des Euklidischen Algorithmus (1)

Definition: Fibonacci Zahlen

Die Fibonacci Zahlen sind definiert durch F0 = 0 und F1 = 1,

und durch die Gleichung Fn = Fn−1 + Fn−2 fur n ≥ 2.

n 0 1 2 3 4 5 6 7 8 9 10 11 12 . . .

Fn 0 1 1 2 3 5 8 13 21 34 55 89 144 . . .

Fn ≈1√5

(1 +√

5

2

)nmit Basiszahl

1 +√

5

2≈ 1.618

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 6/58

Analyse des Euklidischen Algorithmus (2)

Hilfssatz

Es seien a > b ≥ 1 zwei ganze Zahlen,

fur die der Aufruf von Euklid(a, b) zu k ≥ 1 rekursiven Aufrufen fuhrt.

Dann gilt a ≥ Fk+2 und b ≥ Fk+1.

Beweis mit vollstandiger Induktion uber k ≥ 1

Der Fall k = 1: Aus b ≥ 1 folgt b ≥ F2 = 1.

Aus a > b ≥ 1 folgt a ≥ F3 = 2.

Induktionsschritt: Wenn Euklid(a, b) zu k rekursiven Aufrufen fuhrt,

dann fuhrt Euklid(b, a mod b) zu mindestens k − 1 Aufrufen.

Die Induktionsannahme liefert dann b ≥ Fk+1 (!) und a mod b ≥ Fk .

Aus a > b folgt ba/bc ≥ 1.

Daraus erhalten wir b + (a mod b) = b + (a − bba/bc) ≤ a.Ergo a ≥ b + (a mod b) ≥ Fk+1 + Fk = Fk+2

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 7/58

Analyse des Euklidischen Algorithmus (3)

Gabriel Lame (1795-1870):

Satz von Lame

Es seien a > b ≥ 1 zwei ganze Zahlen mit b < Fk+1 (mit k ≥ 1).

Dann macht Euklid(a, b) weniger als k rekursive Aufrufe.

Die Schranke “b < Fk+1” im Satz von Lame ist bestmoglich:

Euklid(Fk+2,Fk+1) macht namlich genau k rekursive Aufrufe.

Der erste rekursive Aufruf ist Euklid(Fk+1,Fk+2 mod Fk+1).

Der erste rekursive Aufruf ist Euklid(Fk+1,Fk).

Der Rest folgt mit Induktion.

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 8/58

Zusammenfassung

Der Satz von Lame und Fn ≈ 1.618n implizieren:

Satz

Fur zwei Eingabezahlen a > b ≥ 1 mit n Bits

terminiert der Euklidische Algorithmus nach O(n) rekursiven Aufrufen.

Bei jedem Aufruf wird eine Modulo-Operation durchgefuhrt.

Modulo-Operationen sind gleich teuer wie Divisionen und

Multiplikationen von n-stelligen Zahlen

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 9/58

Der erweiterte Euklidische Algorithmus

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 10/58

Satz von Bezout

Etienne Bezout (1730–1783):

Satz von Bezout

Fur ganze Zahlen a und b gilt

ggT(a, b) = min{ax + by | x , y ∈ Z} ∩ Z+

Beweisskizze:

(1) ggT(a, b) teilt a und b, und somit auch ax + by .

(2) Es sei s = min{ax + by | x , y ∈ Z} ∩ Z+ und ax ′ + by ′ = s.

a mod s = a − qs (fur ein q ∈ Z)

= a − q(ax ′ + by) = a(1− qx ′) + b(−qy)

Daher teilt s sowohl a als auch b, und somit ggT(a, b).

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 11/58

Der erweiterte Euklidische Algorithmus (1)

Der erweiterte Euklidische Algorithmus berechnet nicht nur

den ggT der beiden Zahlen a und b, sondern auch

die Werte der Koeffizienten x und y in der Bezout Darstellung:

Erweiterter Euklidischer Algorithmus:

1 procedure Extended-Euklid(a,b)

2 if b==0 then return (a,1,0)

3 else (d,x’,y’):= Extended-Euklid(b, a mod b)

4 (d,x,y) := (d,y’,x’-floor(a/b)*y’)

5 return (d,x,y)

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 12/58

Der erweiterte Euklidische Algorithmus (2)

1 procedure Extended-Euklid(a,b)

2 if b==0 then return (a,1,0)

3 else (d,x’,y’):= Extended-Euklid(b, a mod b)

4 (d,x,y) := (d,y’,x’-floor(a/b)*y’)

5 return (d,x,y)

a b d x y

33 39 3 6 −5

39 33 3 −5 6

33 6 3 1 −5

6 3 3 0 1

3 0 3 1 0

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 13/58

Der erweiterte Euklidische Algorithmus (3)

1 procedure Extended-Euklid(a,b)

2 if b==0 then return (a,1,0)

3 else (d,x’,y’):= Extended-Euklid(b, a mod b)

4 (d,x,y) := (d,y’,x’-floor(a/b)*y’)

5 return (d,x,y)

Korrektheit:

Berechnung von (d , x , y) aus (d , x ′, y ′) mit d = bx ′ + (a mod b)y ′.

ax + by = ay ′ + b(x ′ − ba/bcy ′)

= bx ′ + (a − bba/bc) y ′

= bx ′ + (a mod b)y ′

= d

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 14/58

Anwendung des erweiterten Euklidischen Algorithmus

Problem

Fur a, c ∈ Z und m ∈ Z+,

lose die lineare Kongruenzgleichung ax ≡ c mod m.

Aquivalentes Problem: Finde x , y ∈ Z mit ax +my = c

Berechne d := ggT(a,m). Wenn c nicht durch d teilbar, dann

STOP (keine Losung).

Wenn c durch d teilbar:

Bestimme Losung (x∗, y ∗) fur neue Gleichung ax +my = d .

Dann ist x = (c/d)x∗ eine Losung von ax ≡ c mod m.

Alle Losungen: x = (c/d)x∗ + (m/d)k mit k ∈ Z

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 15/58

Der Chinesische Restsatz

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 16/58

Das Ratsel von Sun Tzu Suan Ching

Sun Tzu Suan Ching:

Author von “Master Sun’s Mathematical Manual”

Lebte wahrscheinlich um 400 oder um 500 unserer Zeit

Nicht zu verwechseln mit Sun Tzu (Author von “The Art of War”)

There are certain things whose number is unknown.

If we count them by threes, we have two left over;

by fives, we have three left over;

and by sevens, two are left over.

How many things are there?

Finde x mit x ≡ 2 mod 3 und x ≡ 3 mod 5 und x ≡ 2 mod 7

Antwort: Alle x ≡ 23 mod 105

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 17/58

Der Chinesische Restsatz

Satz

Fur paarweise teilerfremde ganze Zahlen n1, . . . , nk und

fur ganze Zahlen r1, . . . , rk besitzt das Gleichungssystem

x ≡ r1 mod n1

x ≡ r2 mod n2

......

x ≡ rk mod nk

genau eine Losung x∗ mit 0 ≤ x∗ < n1n2 · · · nk .

Alle Losungen werden durch x ≡ x∗ mod n1n2 · · · nk beschrieben.

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 18/58

Der Chinesische Restsatz fur k=2

Satz

Fur teilerfremde ganze Zahlen n1 und n2 und

fur ganze Zahlen r1 und r2 besitzt das Gleichungssystem

x ≡ r1 mod n1

x ≡ r2 mod n2

genau eine Losung x∗ mit 0 ≤ x∗ < n1n2.

Beispiel:

n1 = 5

n2 = 8

0 1 2 3 4 5 6 7

0 0 25 10 35 20 5 30 15

1 16 1 26 11 36 21 6 31

2 32 17 2 27 12 37 22 7

3 8 33 18 3 28 13 38 23

4 24 9 34 19 4 29 14 39

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 19/58

Der Chinesische Restsatz fur k=2: Anwendung

Muss man modulare Arithmetik (Addition, Subtraktion, Multiplikation)

in der grossen Grundmenge {0, 1, 2, . . . , n1n2 − 1} durchfuhren,

so reicht es aus, die Operationen auf den kleineren Grundmengen

{0, 1, 2, . . . , n1 − 1} und {0, 1, 2, . . . , n2 − 1} durchzufuhren.

Wenn x bei Division durch (n1, n2) die Reste (r1, r2) lasst, und

wenn y bei Division durch (n1, n2) die Reste (s1, s2) lasst, so ergeben

x + y die Reste (r1 + s1 mod n1, r2 + s2 mod n2),

x − y die Reste (r1 − s1 mod n1, r2 − s2 mod n2),

und xy die Reste (r1s1 mod n1, r2s2 mod n2).

Mit dem Chinesischen Restsatz kann man leicht von der

Zwei-Zahlen-Darstellung in die Einzeldarstellung wechseln.

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 20/58

Der Chinesische Restsatz fur k=2: Der Algorithmus

Fur teilerfremde n1, n2 und fur r1, r2 lose man das System

x ≡ r1 mod n1

x ≡ r2 mod n2

Algorithmus zur Losung des Systems:

Finde m1 mit n1m1 ≡ 1 mod n2.

Finde m2 mit n2m2 ≡ 1 mod n1.

Setze x = (n1m1r2 + n2m2r1) mod n1n2.

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 21/58

Modulare Potenzfunktion

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 22/58

Modulare Potenzfunktion

Problem: Modulares Potenzieren

Eingabe: Drei positive ganze Zahlen a, n,m

Gesucht: Der Wert an mod m

Achtung:

Wenn man an berechnet, indem man einfach n-mal mit der Zahl a

multipliziert, dann kostet das n Multiplikationen

Wenn man an berechnet, indem man einfach n-mal mit der Zahl a

multipliziert, dann arbeitet man mit Zahlen mit Θ(n log a) Stellen

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 23/58

Ein Rechenbeispiel

Wir betrachten den Exponenten n = 789

n = 789 = 512 + 256 + 16 + 4 + 1 = 29 + 28 + 24 + 22 + 20

Wir berechnen der Reihe nach die Hilfswerte

H0 = a mod m,

H1 = a2 mod m,

H2 = a4 mod m,

H3 = a8 mod m,

H4 = a16 mod m,

und allgemein Hk = a2k

mod m

Dabei rechnen wir: Hk+1 := H2k mod m

Zum Schluss multiplizieren wir H9 · H8 · H4 · H2 · H0(und dabei wird nach jeder Multiplikation das Ergebnis wieder

modulo m genommen)

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 24/58

Modulare Potenzfunktion: Algorithmus

Modular-Exponentiation(a, n,m)

1 result= 1;

2 let n[k], n[k-1], ..., n[0] be

3 the binary representation of n;

4 for i= k downto 0 do

5 result= (result*result) mod m;

6 if n[i]==1 then result= (result*a) mod m;

7 endfor

8

9 return result

Fur Eingabezahlen a, n,m mit k Bits

kann die Modulare Potenzfunktion mit O(k) Additionen,

Multiplikationen und Modulooperationen berechnet werden.

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 25/58

Noch ein Rechenbeispiel (1)

Das folgende Schema fur den Exponenten n = 15 verwendet sechs

Multiplikationen:

a2 = a · a 2 = 1 + 1

a4 = a2 · a2 4 = 2 + 2

a8 = a4 · a4 8 = 4 + 4

a3 = a2 · a 3 = 2 + 1

a7 = a4 · a3 7 = 4 + 3

a15 = a8 · a7 15 = 8 + 7

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 26/58

Noch ein Rechenbeispiel (2)

Das folgende Schema fur den Exponenten n = 15 verwendet nur funf

Multiplikationen:

a2 = a · a 2 = 1 + 1

a3 = a2 · a 3 = 2 + 1

a6 = a3 · a3 6 = 3 + 3

a12 = a6 · a6 12 = 6 + 6

a15 = a12 · a3 15 = 12 + 3

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 27/58

Additionsketten (1)

Definition: Additionskette

Eine Additionskette fur eine ganze Zahl n ≥ 2 ist

eine Zahlenfolge 〈x0, x1, . . . , xk〉 mit folgenden Eigenschaften:

Es gilt x0 = 1

Fur jeden Index i ≥ 2 kann die Zahl xi als Summe xi = xr + xs mit

0 ≤ r , s < i geschrieben werden

Es gilt xk = n

Die Zahl k ist die Lange der Additionskette.

Mit `(n) bezeichnen wir die Lange der kurzesten Additionskette fur n.

Beispiel:

Wir haben gesehen, dass `(15) ≤ 5 gilt

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 28/58

Additionsketten (2)

Trivial: Fur alle n ≥ 2 gilt `(2n) ≤ `(n) + 1.

Fakt: Es existieren Zahlen n mit `(2n) ≤ `(n).

Zum Beispiel gilt `(382) = `(191) = 11

Fakt: Es existieren Zahlen n mit `(2n) ≤ `(n)− 1.

(Neill Michael Clift hat 2011 ausgerechnet,

dass n = 375494703 die kleinste derartige Zahl ist.)

Niemand weiss, ob es eine Zahl n mit `(2n) ≤ `(n)− 2 gibt

Scholz-Brauer Vermutung (1937):

Fur alle n ≥ 2 gilt `(2n − 1) = `(n) + n − 1

Komplexitat der Berechnung von `(n): unbekannt

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 29/58

Primzahl-Test

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 30/58

Primzahlen

Wolfram-Alpha behauptet:

10ˆ200 + 357 is a prime number

10ˆ200 + 361 is not a prime number

Wolfram-Alpha behauptet auch:

10ˆ200 + 349 is not a prime number

Partial factorization:

2399 × 7079 × 91033 × 360628131971 × 1793656940117246968

607844523635531601680271722217839963531653895049263302135

215181772679733902185996354015802773968132577289499540492

4965089532082651688920261909909036099958383

(4 prime factors, 1 composite factor)

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 31/58

Primzahlen

Carl Friedrich Gauss, “Disquisitiones Arithmeticae”, (1801):

“Problema, numeros primos a compositis dignoscendi, hosque in factores

suos primos resolvendi, ad gravissima ac utilissima totius arithmeticae

pertinere, et geometrarum tum veterum tum recentiorum industriam ac

sagacitatem occupavisse, tam notum est, ut de hac re copiose loqui

superfluum foret.”

“Dass das Problem, die Primzahlen von den zusammengesetzten zu

unterscheiden und letztere in ihre Primfaktoren zu zerlegen, zu den

wichtigsten und nutzlichsten der ganzen Arithmetik gehort und den Fleiss

und die Weisheit der Geometer der Antike und der Neuzeit beschaftigt

hat, ist so bekannt, dass es uberflussig ist, viel daruber zu sagen.”

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 32/58

Primzahlen

Problem: Primzahl

Eingabe: Eine positive ganze Zahl n in Dezimaldarstellung

Frage: Ist n eine Primzahl?

Cryptosysteme (wie zum Beispiel RSA) benotigen sehr grosse

Primzahlen

Die Sicherheit von solchen Systemen beruht auf der (bis heute

unbewiesenen) Annahme, dass das Faktorisieren von naturlichen

Zahlen ein algorithmisch schwieriges Problem ist

Faktorisieren 6= Primzahl-Test

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 33/58

Primzahl-Test (1)

Ein korrekter, deterministischer Algorithmus:

1 for t= 2 to sqrt(n) do

2 if (n mod t == 0) then return ”COMPOSITE”

3

4 return ”PRIME”

Aber: Laufzeit nicht polynomiell beschrankt in Lange der Eingabe

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 34/58

Primzahl-Test (2)

Ein randomisierter Algorithmus:

1 Pick random number t from –2,...,sqrt(n)˝

2 if (n mod t == 0) then return ”COMPOSITE”

3 else return ”PRIME”

Wenn dieser Test COMPOSITE sagt, dann ist n wirklich nicht-prim

Wenn dieser Test PRIME sagt, dann ist n nicht notwendigerweise prim

Ubung

Betrachte den Spezialfall n = q2, wobei q prim ist.

Frage: Wie gross ist die Fehlerwahrscheinlichkeit?

Frage: Wie oft muss man den Test wiederholen, damit die

Fehlerwahrscheinlichkeit unter 1/2 sinkt?

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 35/58

Zahlen-theoretisches Werkzeug (1)

Definition

Mit Z∗n bezeichnen wir die multiplikative Gruppe modulo n. Elemente von

Z∗n sind die Restklassen modulo n, die relativ prim zu n sind:

Z∗n = {a ∈ Zn | ggT(a, n) = 1}

1 2 4 7 8 11 13 14

1 1 2 4 7 8 11 13 14

2 2 4 8 14 1 7 11 13

4 4 8 1 13 2 14 7 11

7 7 14 13 4 11 2 1 8

8 8 1 2 11 4 13 14 7

11 11 7 14 2 13 1 8 4

13 13 11 7 1 14 8 4 2

14 14 13 11 8 7 4 2 1

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 36/58

Zahlen-theoretisches Werkzeug (2)

Satz (Kleiner Satz von Fermat)

Fur eine Primzahl p und a ∈ Z∗p gilt:

ap−1 ≡ 1 (mod p)

Beispiel (mit Primzahl p = 5):

14 ≡ 1 ≡ 1 (mod 5)

24 ≡ 16 ≡ 1 (mod 5)

34 ≡ 81 ≡ 1 (mod 5)

44 ≡ 256 ≡ 1 (mod 5)

Beispiel (mit Nicht-Primzahl p = 8):

37 ≡ 3 6≡ 1 (mod 8)

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 37/58

Fermat Test

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 38/58

Fermat Test (1): zur Basis 2

Kleiner Fermat =⇒ Jedes prime n 6= 2 erfullt 2n−1 ≡ 1 (mod n)

Fermat Test zur Basis 2:

1 If modular-exp(2,n-1,n) ¡¿ 1

2 then return ”COMPOSITE”

3 else return ”PRIME”

Dieser Test ist halb-seitig fehlerhaft:

Die Zahl n = 341 = 11 · 31 ist nicht-prim

Dennoch gilt 2340 ≡ 1 (mod 341)

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 39/58

Fermat Test (2): zur Basis 3

Kleiner Fermat =⇒ Jedes prime n 6= 3 erfullt 3n−1 ≡ 1 (mod n)

Fermat Test zur Basis 3:

1 If modular-exp(3,n-1,n) ¡¿ 1

2 then return ”COMPOSITE”

3 else return ”PRIME”

Dieser Test ist halb-seitig fehlerhaft:

Die Zahl n = 91 = 7 · 13 ist nicht-prim

Dennoch gilt 390 ≡ 1 (mod 91)

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 40/58

Fermat Test (3): randomisiert

Fermat Test:

1 Randomly pick integer a in –2,...,n-2˝

2 If ggT(a,n)¿1

3 then return ”COMPOSITE”

4 Else if modular-exp(a,n-1,n) ¡¿ 1

5 then return ”COMPOSITE”

6 Else return ”PROBABLY PRIME”

Wenn Test COMPOSITE sagt, dann ist n wirklich nicht-prim

Wenn Test PROBABLY PRIME sagt, dann ist n nicht

notwendigerweise prim

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 41/58

Pseudo-Primzahlen (1)

Definition (Pseudo-Primzahl)

Es sei n ≥ 3 eine ungerade, zusammengesetzte Zahl, und es sei a ∈ Z∗n.Falls an−1 ≡ 1 (mod n) gilt,

dann ist n eine Pseudo-Primzahl zur Basis a;

dann ist a eine betrugerische Basis fur n.

Beispiel:

n = 341 ist Pseudo-Primzahl zur Basis a = 2

a = 2 ist eine betrugerische Basis fur n = 341

Beispiel:

n = 91 ist Pseudo-Primzahl zur Basis a = 3

a = 3 ist eine betrugerische Basis fur n = 91

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 42/58

Pseudo-Primzahlen (2)

Satz

Jede ungerade, zusammengesetzte Zahl n ≥ 3 erfullt genau eine der

folgenden beiden Aussagen:

Alle Basen a ∈ Z∗n sind Betruger fur n.

Hochstens die Halfte aller Basen a ∈ Z∗n sind Betruger fur n.

Beweis:

Aus an−1 ≡ 1 (mod n) und bn−1 ≡ 1 (mod n) folgt immer auch

(ab)n−1 ≡ 1 (mod n). Ergo: ab ∈ Z∗n ist ebenfalls betrugerisch.

Das inverse Element a−1 von a in Z∗n erfullt (a−1)n−1 ≡ 1 (mod n).

Ergo: Mit a ist immer auch a−1 betrugerisch.

Das neutrale Element 1 ist betrugerisch.

Ergo: Die betrugerischen Basen bilden Untergruppe von Z∗n.Kardinalitat einer Untergruppe teilt Kardinalitat der Gruppe Z∗n.

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 43/58

Carmichael Zahlen (1)

Definition (Carmichael Zahl)

Eine ungerade, zusammengesetzte Zahl n ≥ 3 ist eine Carmichael Zahl,

falls alle Basen a ∈ Z∗n Betruger fur n sind.

Carmichael Zahlen sind todlich fur den Fermat Test:

Fur Carmichael Zahlen liefert der Test immer die falsche Antwort.

Die ersten Carmichael Zahlen wurden 1912 vom amerikanischen

Mathematiker Robert Daniel Carmichael entdeckt (“On composite

numbers P which satisfy the Fermat congruence”)

Kleinste Carmichael Zahl: n = 561 = 3 · 11 · 17 (Nachrechnen!)

William Robert Alford, Andrew Granville und Carl Pomerance haben

1994 bewiesen, dass es unendlich viele Carmichael Zahlen gibt

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 44/58

Carmichael Zahlen (2)

Satz (Alwin Reinhold Korselt, 1899)

Eine ungerade, zusammengesetzte Zahl n ≥ 3 ist eine Carmichael Zahl,

genau dann wenn die Primfaktorisierung n = p1 p2 · · · pk die folgenden

Eigenschaften besitzt:

pi 6= pj fur i 6= j (keine wiederholten Primteiler)

pi − 1 | n − 1 fur 1 ≤ i ≤ k

Kleinste Carmichael Zahl: n = 561 = 3 · 11 · 17 (Nachrechnen!)

Nachrechnen:

Die drei Primfaktoren 3, 11, 17 sind paarweise verschieden

n − 1 = 560 = 24 · 5 · 7 ist durch 3− 1 = 2, durch 11− 1 = 10, und

durch 17− 1 = 16 teilbar

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 45/58

Fermat Test: Zusammenfassung

Der Fermat Test zeigt folgendes Verhalten fur ungerade Eingabe-Zahlen

n ≥ 3:

Falls n Primzahl, ist die Antwort immer PROBABLY PRIME

Falls n Carmichael Zahl, ist die Antwort immer PROBABLY PRIME

Falls n nicht-prim und Nicht-Carmichael, ist die Antwort

COMPOSITE mit Wahrscheinlichkeit mindestens 1/2

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 46/58

Miller-Rabin Test

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 47/58

Bessere Behandlung von betrugerischen Basen

Zentrale Idee:

Wir betrachten den Exponenten n − 1 im Fermat Test genauer.

Setze n − 1 = 2tu, mit ungeradem u ≥ 1 und t ≥ 1

Neuer Test fur die Basis a:

1 y[0]:= modular-exp(a,u,n)

2

3 for i:=1 to t do

4 y[i]:= y[i-1]ˆ2 (mod n);

5 if y[i]==1 and y[i-1]¡¿1 and y[i-1]¡¿-1

6 then return ”COMPOSITE”

7 endfor

8

9 if y[t]¡¿1 then return ”COMPOSITE”

10

11 return ”PROBABLY PRIME”

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 48/58

Rechenbeispiel

Wir betrachten die Carmichael Zahl n = 561 = 3 · 11 · 17

mit n − 1 = 560 = 24 · 35, und t = 4, und u = 35.

Dann gilt fur die Basis a = 7:

y0 := modular-exp(7, 35, 561) = 241

y1 := 2412 ≡ 298 (mod 561)

y2 := 2982 ≡ 166 (mod 561)

y3 := 1662 ≡ 67 (mod 561)

y4 := 672 ≡ 1 (mod 561)

Wegen y4 = 1 und y3 6= 1 und y3 6= −1

wird Pseudo-Primzahl n = 561 nun korrekt als nicht-prim erkannt

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 49/58

Zahlen-theoretisches Werkzeug (3)

Satz (Quadratwurzelsatz)

Fur eine Primzahl n besitzt die Gleichung x2 ≡ 1 nur

zwei Losungen uber Z∗n: Die Losung x = 1 und die Losung x = −1.

Beweis:

Schreibe die Gleichung x2 ≡ 1 als (x − 1)(x + 1) ≡ 0 (mod n)

Wenn n prim ist, muss einer der beiden Faktoren durch n teilbar sein

Anmerkung:

Fur die Nicht-Primzahl n = 8 gilt 12 ≡ 32 ≡ 52 ≡ 72 ≡ 1 (mod 8)

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 50/58

Was antwortet der neue Test?

Die Zahlenfolge 〈y0, y1, . . . , yt〉 fur eine ungerade Zahl n ≥ 3 fallt in eine

der folgenden vier Kategorien:

(1) Die Folge 〈∗, ∗, ∗, ∗, . . . , γ 6= 1〉 endet nicht mit 1: Dann ist n keine

Primzahl (laut Fermat Test), und Miller-Rabin erkennt das korrekt.

(2) Die Folge 〈1, 1, 1, 1, . . . , 1〉 besteht nur aus 1en: Keine Indizien.

Miller-Rabin antwortet PROBABLY PRIME.

(3) Die Folge 〈∗, ∗, . . . , ∗,−1, 1, 1, . . . , 1〉 endet mit 1, und das letzte

Folgenelement 6= 1 ist −1: Keine Indizien. Miller-Rabin antwortet

PROBABLY PRIME.

(4) Die Folge 〈∗, ∗, . . . , ∗, γ 6= ±1, 1, 1, . . . , 1〉 endet mit 1, und das

letzte Elemente 6= 1 ist ungleich ±1: Dann ist n keine Primzahl (laut

Quadratwurzelsatz), und Miller-Rabin erkennt das korrekt.

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 51/58

Analyse von Miller-Rabin

Das Hauptresultat zum Miller-Rabin Test lautet:

Satz

Fur eine ungerade Nicht-Primzahl n liefert der Miller-Rabin Test mit

Wahrscheinlichkeit mindestens 1/2 die korrekte Antwort COMPOSITE.

Vorbereitende Schritte im Beweis:

O.B.d.A. ist n = p1 p2 · · · pk eine Carmichael Zahl:

Zusammengesetzte Nicht-Carmichael Zahlen werden ja bereits von

dem in den Miller-Rabin Test integrierten Fermat Test mit

Wahrscheinlichkeit mindestens 1/2 identifiziert.

Wir zerlegen n = n1 n2 in zwei relativ prime Faktoren n1, n2 ≥ 2

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 52/58

Beweis des Hauptresultats (1)

Erster Beweisschritt: Definition von k , b, und B

Ein Paar (b, k) mit b ∈ Z∗n und k ∈ {0, . . . , t} heisst gut,

falls b2ku ≡ −1 (mod n) gilt.

Das Paar (n − 1, 0) ist gut.

Unter allen guten Paaren fixieren wir jetzt

ein Paar (b, k) mit dem grosstmoglichen Wert k .

Also: Es gilt b2ku ≡ −1 (mod n).

Und: Fur alle a ∈ Z∗n und alle j ≥ k + 1 gilt a2ju 6≡ −1 (mod n).

Wir definieren B = {x ∈ Z∗n | x2ku ≡ ±1 (mod n)}.

Diese Menge B enthalt alle (betrugerischen) Basen, fur die

Miller-Rabin mit PROBABLY PRIME antwortet.

Unser Ziel ist es, |B| ≤ |Z∗n|/2 zu zeigen.

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 53/58

Beweis des Hauptresultats (2)

Zweiter Beweisschritt: B 6= Z∗n

Nach dem Chinesischen Restsatz existiert ein c ∈ Z∗nmit c ≡ b (mod n1) und mit c ≡ 1 (mod n2)

Aus c ≡ b (mod n1) folgt c2ku ≡ b2ku ≡ −1 (mod n1)

Aus c ≡ 1 (mod n2) folgt c2ku ≡ 1 (mod n2)

Daraus folgt: c2ku 6≡ 1 (mod n) und c2

ku 6≡ −1 (mod n)

Ergo: c2ku /∈ B, und daher wie gewunscht B 6= Z∗n

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 54/58

Beweis des Hauptresultats (3)

Letzter Beweisschritt: B ist Untergruppe von Z∗n

Betrachte x1, x2 ∈ B.

Also: x2ku1 ≡ ±1 (mod n) und x2

ku2 ≡ ±1 (mod n)

Dann gilt (x1x2)2ku ≡ ±1 (mod n) und daher x1x2 ∈ B.

Damit ist der Beweis des Hauptresultats abgeschlossen.

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 55/58

Anmerkungen

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 56/58

Deterministischer Primzahltest in polynomieller Zeit (1)

Gary L. Miller hat 1975 einen deterministischen Primzahltest

entwickelt. Die Laufzeit dieses Tests betragt O(log4 n), falls die

Erweiterte Riemannsche Vermutung stimmt.

(Aus diesem Test hat sich dann der Miller-Rabin Test entwickelt.)

Die indischen Mathematiker Manindra Agrawal, Neeraj Kayal und

Nitin Saxena (AKS) haben 2002 einen deterministischen

Primzahltest entwickelt. Die Laufzeit dieses Tests betragt

O(log12 n).

Carl Pomerance und Hendrik Lenstra haben die Laufzeit von AKS

auf O(log6 n) verbessert.

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 57/58

Deterministischer Primzahltest in polynomieller Zeit (2)

Der AKS Primzahltest:

1. Check whether n is a perfect power:

if n = ab for integers a > 1 and b > 1, then return COMPOSITE

2. Find the smallest r such that ordr (n) > (log2 n)2

3. If 1 < a < gcd(a, n) for some a ≤ r , then return COMPOSITE

4. If n ≤ r , then return PRIME

5. For a = 1 to√φ(r) log2 n do:

if (x + a)n 6= xn + a in Zn[x ]/(x r − 1), then return COMPOSITE

6. Return PRIME

EA/WS 2019 Kapitel 3: Zahlen-theoretische Algorithmen 58/58