Der euklidische Algorithmus für ganze Zahlen

Ähnliche Dokumente
p Z >1 ist Primzahl, wenn gilt Euklid:

Euklidischer Algorithmus

Form der Äquivalenzklassen

Übung zur Vorlesung Berechenbarkeit und Komplexität

4. ggt und kgv. Chr.Nelius: Zahlentheorie (SS 2007) 9

Student: Alexander Carls Matrikelnummer: Aufgabe: Beschreibung des euklidischen Algorithmus Datum:

Einführung in die Algebra

Bemerkung: der goldene Schnitt ϕ ist die positive Lösung der Gleichung: x 2 = 1 + x

2. Teilbarkeit. Euklidischer Algorithmus

Grundlagen der Arithmetik und Zahlentheorie

Diskreter Logarithmus und Primkörper

2 Teilbarkeit in Z. (a) Aus a b folgt a b und a b und a b und a b. (b) Aus a b und b c folgt a c.

2: Restklassen 2.1: Modulare Arithmetik

3. Der größte gemeinsame Teiler

Erweiterter Euklidischer Algorithmus

Exponentiation: das Problem Gegeben: (multiplikative) Halbgruppe (H, ), Element a H, n N Aufgabe: berechne das Element

Exponentiation: das Problem

Prof. Dr. H. Brenner Osnabrück SS Zahlentheorie. Vorlesung 3. Der euklidische Algorithmus

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

Chr.Nelius: Zahlentheorie (WS 2006/07) ggt und kgv

Diskrete Strukturen Kapitel 5: Algebraische Strukturen (Gruppen)

KAPITEL 2. Zahlen Natürlichen Zahlen

Kryptographische Protokolle

7. Musterlösung zu Mathematik für Informatiker I, WS 2003/04

Bsp. Euklidischer Algorithmus

WS 2009/10. Diskrete Strukturen

Vortrag 20: Kurze Vektoren in Gittern

2. Teil: Diskrete Strukturen

2. Algorithmische Methoden 2.1 Rekursion. 18. April 2017

Einführung in die Algebra

5. Der größte gemeinsame Teiler

1 Modulare Arithmetik

8. Musterlösung zu Mathematik für Informatiker II, SS 2004

Diskrete Strukturen. Vorlesung 15: Arithmetik. 5. Februar 2019

1 Zahlentheorie. 1.1 Kongruenzen

Algorithmische Kryptographie

Interim. Kapitel Einige formale Definitionen

Elliptische Kurven. dp := P P. als die d-fache Skalarmultiplikation von P, so erhalten wir alle Gruppenelemente aus G mittels

Kanonische Primfaktorzerlegung

Beispiel bestimme x Z mit. es gilt also. gilt dann. für x = 1 i k c i (M/m i ) v i gilt. y c i mod m i (1 i k), nämlich y = x mod M

Anzahl der Generatoren

Zahlentheorie I. Christoph Egger. 18. Juni Christoph Egger Zahlentheorie I 18. Juni / 32

Grundkurs Mathematik I

Euklidische Algorithmus, Restklassenringe (Z m,, )

ggt mit Euklid Satz: Um ggt(k, l) mit dem Euklidischen Algorithmus zu berechnen, braucht man höchstens log Φ k < 3 2 log 2 k rekursive Aufrufe.

Mathematische Rekursion

Der größte gemeinsame Teiler und das kleinste gemeinsame Vielfache Proseminar Modul 4c, Gruppe 3: Primzahlen, Dr. Regula Krapf

Der Dreyfus-Wagner Algorithmus für das Steiner Baum Problem

Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

Algorithmen und Datenstrukturen

Relationen und DAGs, starker Zusammenhang

WS 2008/09. Diskrete Strukturen

Kapitel 2: Zahlentheoretische Algorithmen Gliederung

. Zahlentheorie, Arithmetik und Algebra I. Tobias Polzer. Tobias Polzer Zahlentheorie, Arithmetik und Algebra I.. /

Numerische Verfahren und Grundlagen der Analysis

Lineare Algebra I 5. Tutorium Die Restklassenringe /n

Kanonische Primfaktorzerlegung

Der Euklidische Algorithmus

Folgen und Funktionen in der Mathematik

( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

Zahlentheorie, Arithmetik und Algebra I

Diskrete Strukturen. Sebastian Thomas RWTH Aachen Teilbarkeitslehre

Algorithmentheorie Randomisierung

Probabilistische Primzahltests

3.3 Laufzeit von Programmen

String - Matching. Kapitel Definition

1.Vortrag: Rechnen mit Restklassen/modulo einer Zahl

Beispiel: Primelemente in den Gaußschen Zahlen

Übung Algorithmen und Datenstrukturen

Beispiel: Primelemente in den Gaußschen Zahlen

Das Lemma von Gauß und Quotientenringe

Leitfaden. a ist Vielfaches von d und schreiben verkürzt: d a. Ist d kein Teiler von a, so schreiben wir auch: d a. d teilt a oder

Bsp: Die kleinsten Carmichael-Zahlen sind 561, 1105, 1729, Es gibt unendlich viele Carmichael-Zahlen (Beweis 1994).

Zahlentheorie, Arithmetik und Algebra

Literatur. ISM SS 2018 Teil 3/Restklassen

Diskrete Strukturen 5.9 Permutationsgruppen 168/558 c Ernst W. Mayr

Hallo Welt für Fortgeschrittene

Fibonacci-Zahlen und goldener Schnitt

Diskrete Mathematik. Christina Kohl Georg Moser Oleksandra Panasiuk Christian Sternagel Vincent van Oostrom

Zunächst ein paar einfache "Rechen"-Regeln: Lemma, Teil 1: Für beliebige Funktionen f und g gilt:

Grundlegende Tatsachen über den Ring Z

1.2 Eigenschaften der ganzen Zahlen

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Zahlentheorie. Stefan Takacs Linz, am 2. Juni 2004

Algorithmen und Datenstrukturen

Zahlentheorie, Arithmetik und Algebra I. Felix Teufel Hallo Welt! -Seminar - LS 2

Injektiv, Surjektiv, Bijektiv

Mathematik I für Studierende der Informatik und Wirtschaftsinformatik (Diskrete Mathematik) im Wintersemester 2015/16

Vorlesung Diskrete Strukturen Die natürlichen Zahlen

Kapitel III Ringe und Körper

Volker Kaatz. Faktorisierung. Faktorisierung. Problem und Algorithmen. Relevanz in der Kryptographie

Shift-and-Add-Multiplikation

KAPITEL 13. Polynome. 1. Primfaktorzerlegung in den ganzen Zahlen. ,, p r

Kapitel 6: Das quadratische Reziprozitätsgesetz

SAGE Computeralgebrapraktikum: Elementare Zahlentheorie und Anwendungen. Prof. Dr. Wolfram Koepf Prof. Dr. Werner Seiler WS 2014

Transkript:

Der euklidische Algorithmus für ganze Zahlen Ein unverzichtbares Verfahren in der Kryptographie ist der euklidische Algorithmus. In diesem Kapitel stellen wir die erste Version für ganze Zahlen vor. Sei im folgenden Z die Menge der ganzen Zahlen und sei der Betrag a von a œ Z definiert als a für a Ø 0 und als a für a<0. Definition 1. Eine Zahl a œ Z teilt genau dann eine Zahl b œ Z, wenn es eine Zahl c œ Z gibt mit ac = b. Wir nennen dann a auch einen Teiler von b. Grundlage für unsere weiteren Betrachtungen ist die ganzzahlige Division mit Rest. Theorem 1. Für a, b œ Z, b = 0, existieren eindeutige Zahlen r, s œ Z mit a = sb + r, wobei 0 Æ r< b gilt. Die Zahl s heißt der Quotient von a durch b und r heißt der (modulare) Rest von a durch b. Wir schreiben auch a mod b := r. Beweis. Zunächst zeigen wir die Existenz von Quotient und Rest: Wir setzen S := {a sb s œ Z}flN und wählen ein minimales r 0 := a s 0 b œ S. Wir nehmen nun an, dass a s 0 b = r 0 Ø b gilt. Falls b>0, dann wäre r := r 0 b = a (s 0 + 1)b œ S, bzw. falls b<0, dann wäre r := r 0 + b = a (s 0 1)b œ S. Inbeiden Fällen hätten wir r<r 0, also einen Widerspruch zur Minimalität von r 0. Folglich ist die Annahme falsch und es gilt r 0 < b und a = s 0 b + r 0. Als nächstes zeigen wir die Eindeutigkeit: Angenommen es gibt zwei ganzzahlige Paare (s 0, r 0 ) und (s 1, r 1 ) mit r 0 Ø r 1 und a = s 0 b + r 0 und b = s 1 b + r 1 mit 0 Æ r 0, r 1 < b. Subtraktion

16 michael braun der beiden Gleichungen ergibt (s 0 s 1 )b = r 0 r 1. Folglich muss r 0 r 1 Ø 0 ein Teiler von b sein. Da aber 0 Æ r 0 r 1 < b, muss r 0 r 1 = 0 also r 0 = r 1 gelten. In diesem Fall gilt dann auch s 0 s 1 = 0 und somit s 0 = s 1,dab = 0. Insgesamt ist somit auch die Eindeutigkeit von Quotient und Rest bewiesen. Wir definieren nun die Menge der größten gemeinsamen Teiler zweier ganzer Zahlen. Definition 2. Eine Zahl t œ Z heißt genau dann ein größter gemeinsamer Teiler von a, b œ Z, falls t ein Teiler von a und b ist und falls jeder Teiler s œ Z von a und b die Zahl t teilt. Die Menge der größten gemeinsamen Teiler von a und b wird mit gcd(a, b) abgekürzt. In dieser Definition haben wir den größten gemeinsamen Teiler nicht als einzelne Zahl, sondern als Menge angegeben. Diese Definition ist aber sinnvoll, da mit jedem größten gemeinsamen Teiler t von a und b auch t ein größter gemeinsamer Teiler von a und b ist. Genaugenommen gilt t œ gcd(a, b) genau dann, wenn gcd(a, b) ={t, t} gilt. Folglich ist der größte gemeinsame Teiler eindeutig bis auf die Menge der Einheiten Z ú = {1, 1}. In der Praxis beschränkt man sich bei der Definition des größten gemeinsamen Teilers jedoch auf den normierten Wert t als eindeutigen Repräsentanten. Die Menge der größten gemeinsamen Teiler erfüllt folgende Rechenregeln. Lemma 1. Für a, b, s œ Z gilt: 1. gcd(a, b) =gcd(±a, ±b) 2. gcd(a, a) =az ú 3. gcd(a,0)=az ú 4. gcd(a,1)=z ú 5. gcd(as, bs) =s gcd(a, b) 6. gcd(b, a sb) =gcd(a, b) 7. gcd(b, a mod b) =gcd(a, b)

public-key-algorithmen 17 Ein konstruktives Verfahren, welches zu a, b œ Z einen größten gemeinsamen Teiler berechnet, liefert der euklidische Algorithmus. Da die Berechnung bis auf Vorzeichen eindeutig ist, können wir uns darauf beschränken, dass a, b positiv sind und als größter gemeinsamer Teiler eine positive Zahl bestimmt wird. Der Algorithmus basiert auf der letzten Identität von Lemma 1, welche rekursiv angewandt wird. Algorithmus 1. Euklidischer Algorithmus (rekursiv) Output: t œ gcd(a, b) Procedure: Euklid(a, b) 1 if b = 0 then return a 2 else return Euklid(b, a mod b) Da aufgrund von Theorem 1 a mod b<bgilt, terminiert der Algorithmus nach endlichen vielen Schritten. Die Idee des euklidischen Algorithmus geht dem Namen nach bereits auf Euklid (300 v. Chr.) zurück. In seinem berühmten Werk Die Elemente 1 wird die Methode zur Bestimmung eines größten gemeinsamen Teilers beschrieben, indem sukzessive die kleinere von der größeren Zahl abgezogen wird. Die ganzzahligen Divisionen werden also in dieser ersten Version von Euklid durch iterierte Subtraktionen erreicht. Eine nicht-rekursive Version ergibt sich durch die Division mit Rest. Durch eine iterierte Division mit Rest 1 Euklid. Die Elemente des Euklid, Euklides: Stoicheia. http://www.operaplatonis.de/euklid/ r i 2 = s i 1 r i 1 + r i werden ausgehend von r 0 = a und r 1 = b mit a Ø b solange die Reste r i mit i Ø 2 berechnet, bis r n+1 = 0 gilt. In diesem Fall erhalten wir dann r n œ gcd(a, b). Algorithmus 2. Euklidischer Algorithmus (iterativ) Output: t œ gcd(a, b) 1 v := a, u := b 2 while u = 0 do 3 r := v mod u /* r = v su für s = Âv/uÊ */ 4 v := u, u := r 5 return v

18 michael braun Um nun die Anzahl der Schritte im euklidischen Algorithmus zu ermitteln, gehen wir vom schlechtesten Fall aus, dass bei der ganzzahligen Division mit Rest der ganzzahlige Anteil s = 1 ist. Dies führt zur Folge der Fibonacci-Zahlen, welche durch die Rekursion f i = f i 1 + f i 2 für i Ø 2 mit den Anfangsbedingungen f 0 = 0 und f 1 = 1 definiert ist. Führt man den Euklidischen Algorithmus mit zwei aufeinanderfolgenden Fibonacci-Zahlen f i+1 und f i aus, so ergibt sich als Rest immer die nächst kleinere Fibonacci-Zahl f i 1, also Âf i+1 /f i Ê = 1 und f i+1 mod f i = f i 1. Demnach müssen für die Anfangswerte f n+1 und f n im Euklidischen Algorithmus n Iterationen, d.h. n Divisionen mit Rest durchgeführt werden. Da f n =(F n (1 F) n ) Ô 5, wobei F =(1 + Ô 5)/2 1, 62 der Goldene Schnitt ist, erhalten wir, dass f n exponentiell wächst mit einem ansteigenden Wert für n. Diese Worst-Case-Betrachtung hat zur Folge, dass die Berechnung von gcd(a, b) höchstens logarithmisch für a und b ist, also linear mit der Stellenanzahl von a und b. Diese Tatsache, dass die Anzahl der ganzzahligen Divisionen mit Rest maximal für die Fibonacci-Zahlen ist, geht auf Lamé (1844) zurück 2. 2 T. E. Moore. Euclid s Korollar 1. Der euklidische Algorithmus für zwei ganze Zahlen a, b œ N mit a Ø b>0 terminiert nach Æ log F (b)+1 Schritten, wobei F =(1 + Ô 5)/2 1, 62. Algorithm and Lamé s Theorem on a Microcomputer. 27(4):290 295, August 1989 Um nun den Gesamtaufwand des euklidischen Algorithmus zweier Zahlen a, b œ Z mit m log 2 (a) log 2 (b) zu bestimmen, können wir uns überlegen, dass eine Division mit Rest einen quadratischen Aufwand O(m 2 ) besitzt. Da im schlechesten Fall O(m) Divisionsschritte benötigt werden, kommt man daher auf eine erste Gesamtaufwandsabschätzung von O(m 3 ).Dadurchdie iterierten Divisionen die Zahlen aber kleiner werden, liefert der genaue Blick auf den Aufwand eine quadratische Komplexität. Ein Beweis ist beispielsweise bei Shoup 3 zu finden. Theorem 2. Der euklidische Algorithmus für zwei Zahlen a, b œ N besitzt eine Komplexität von O(log(a) log(b)). Eine Version des euklidischen Algorithmus, welche binärer 3 V. Shoup. AComputational Introduction to Number Theory and Algebra. Cambridge University Press, 2008

public-key-algorithmen 19 euklidischer Algorithmus genannt wird, geht auf Stein 4 zurück. Laut Knuth 5 wurde diese Version bereits von Silver und Tersian verwendet, aber niemals publiziert. Die Idee ist, die teuren Divisionen durch Divisionen mit 2 und Subtraktionen zu ersetzen. Der binäre euklidische Algorithmus, auch zu Ehren seines Erfinders steinscher Algorithmus genannt, basiert auf folgenden Rechenregeln für den größten gemeinsamen Teiler, welche direkt aus Lemma 1 abgeleitet werden können. 4 J. Stein. Computational Problems Associated with Racah Algebra. Journal of Computational Physics, 1(3):397 405, 1967 5 D. E. Knuth. The Art of Computer Programming. Volume 2: Seminumerical Algorithms. Addison-Wesley Professional, 1997 Korollar 2. Für die Menge der größten gemeinsamen Teiler von a, b œ Z gilt: 1. gcd(a, b) =2 gcd(a/2, b/2), falls a und b gerade. 2. gcd(a, b) =gcd(a/2, b), falls a gerade und b ungerade. Diese beiden Regeln und Lemma 1(6) für s = 1 liefert folgenden Algorithmus. Algorithmus 3. Steinscher Algorithmus (rekursiv) Output: t œ gcd(a, b) Procedure: Stein(a, b) 1 if a = b then return a 2 if a is even then 3 if b is even then return 2 Stein(a/2, b/2) 4 else return Stein(a/2, b) 5 else 6 if b is even then return Stein(a, b/2) 7 else return Stein(b, a b) Bei der Anweisung 6 sind beide Zahlen a und b ungerade. Somit ist die Zahl a b gerade und gcd(a, b) =gcd(b, a b) = gcd(b, (a b)/2). Anstelle von Stein(b, a b) hätten wir auch Stein(b, (a b)/2) setzen können. Eine nicht-rekursive Version kann wie folgt formuliert werden. Algorithmus 4. Steinscher Algorithmus (iterativ) Output: t œ gcd(a, b)

20 michael braun 1 v := a, u := b, e := 1 2 while v and u are even do v := v/2, u := u/2, e := 2e 3 while u = 0 do 4 while v is even do v := v/2 5 while u is even do u := u/2 6 if v Ø u then v := v u else u := u v 7 return ev Das folgende Lemma von Bézout besagt, dass man einen größten gemeinsamen Teiler zweier Zahlen als ganzzahlige Linearkombination der beiden Ausgangszahlen darstellen kann. Lemma 2 (Bézout). Für ganze Zahlen a, b œ Z existieren ganze Zahlen g, h œ Z mit ag + bh œ gcd(a, b). Der Beweis erfolgt konstruktiv mit Hilfe des erweiterten euklidischen Algorithmus: Ohne Einschränkung der Allgemeinheit nehmen wir a, b œ N mit a Ø b an. Wir gehen von den Gleichungen a 1 + b 0 = a a 0 + b 1 = b aus und führen auf der rechten Seite den ersten Schritt des euklidischen Algorithmus aus, d.h. wir ziehen ein Vielfaches von b von a ab, so dass es den Rest r = a mod b ergibt, etwa r = a s b. Die Erweiterung ist nun, dass wir auf der linken Seite denselben Schritt durchführen, d.h. wir ziehen das s-fache der zweiten Gleichung von der ersten Gleichung ab und erhalten a(1 s 0)+b(0 s 1) =r. Als nächstes setzen wir den euklidischen Algorithmus für b und r fort sowohl für die rechte als auch für die linke Seite der Gleichungen bis der positive größte gemeinsame Teiler von a und b auf der rechten Seite berechnet ist. Die entsprechenden Koe zienten für a und b auf der linken Seite sind dann die gesuchten Werte für g und h. Allgemein starten wir mit v := a und u := b und berechnen mit Algorithmus 4 den größten gemeinsamen Teiler, wobei die Gleichungen ag 1 + bh 1 = v ag 2 + bh 2 = u

public-key-algorithmen 21 mit v Ø u erfüllt bleiben. Der Algorithmus terminiert, wenn u = 0. In diesem Fall gilt dann v œ gcd(a, b) und g := g 1 und h := h 1 sind die gesuchten Koe zienten mit ag + bh œ gcd(a, b). Durch diese Modifikation von Algorithmus 4 können wir eine Variante des euklidischen Algorithmus in erweiterter Form angeben. Algorithmus 5. Erweiterter euklidischer Alg. (iterativ) Output: (t, g, h) mit ag + bh = t œ gcd(a, b) 1 g 1 := 1, h 1 := 0, v := a 2 g 2 := 0, h 2 := 1, u := b 3 while u = 0 do 4 s := Âv/uÊ 5 r := v su, g := g 1 sg 2, h := h 1 sh 2 6 g 1 := g 2, h 1 := h 2, v := u 7 g 2 := g, h 2 := h, u := r 8 return (v, g 1, h 1 ) Des weiteren kann der steinsche Algorithmus auch um die Berechnung der Bézout-Koe zienten erweitert werden. Wir können ohne Einschränkung davon ausgehen, dass nicht beide Werte a und b gleichzeitig gerade sein können. Ansonsten können wir aufgrund von Korollar 2 (1) solange den Faktor 2 ausklammern, bis mindestens einer der neuen Werte a oder b ungerade ist. Außerdem gilt weiterhin a Ø b. Falls dies nicht gilt, müssen die beide Werte einfach vertauscht werden. Anschließend setzen wir mit den Startbedinungen g 1 := 1, h 1 := 0, v := a und g 2 := 0, h 2 := 1, u := b den steinschen Algorithmus fort, so dass zu jedem Zeitpunkt die Invarianzen ag 1 + bh 1 = v ag 2 + bh 2 = u mit v Ø u erfüllt bleiben. Falls v gerade ist und u ungerade, dann gilt gcd(v, u) =gcd(v/2, u), d.h.wir müssen die Gleichung ag 1 + bh 1 = v derart anpassen, dass hinterher v mit v/2 überschrieben wird. Dabei müssen folgende Fälle betrachtet werden. 1. Falls g 1 und h 1 gerade sind, so gilt a(g 1 /2)+b(h 1 /2) =v/2.

22 michael braun 2. Falls g 1 und h 1 ungerade sind, so müssen a und b beide ungerade sein. 3. Falls g 1 gerade und h 1 ungerade sind, so muss h 1 b gerade sein und somit auch b. Folglich ist a ungerade. 4. Falls h 1 gerade und g 1 ungerade sind, so muss g 1 a gerade sein und somit auch a. Folglich ist b ungerade. In allen drei Fällen (2),(3) und (4) sind g 1 + b und h 1 a gerade und es gilt folgende Gleichung a(g 1 + b)+b(h 1 a) =v bzw. a(g 1 + b)/2 + b(h 1 a)/2 = v/2. Analog können wir die zweite Gleichung ag 2 + bh 2 = u behandeln. Insgesamt kann der steinsche Algorithmus wie folgt erweitert werden. Algorithmus 6. Erweiterter steinscher Algorithmus (iterativ) Output: (t, g, h) mit ag + bh = t œ gcd(a, b) 1 a Õ := a, b Õ := b, e := 1 2 while a Õ and b Õ are even do a Õ := a Õ /2, b Õ := b Õ /2, e := 2e 3 g 1 := 1, h 1 := 0, v := a 4 g 2 := 0, h 2 := 1, u := b 5 while u = 0 do 6 while v is even do 7 v := v/2 8 if g 1 and h 1 are even then g 1 := g 1 /2, h 1 := h 1 /2 9 else g 1 :=(g 1 + b Õ )/2, h 1 :=(h 1 a Õ )/2 10 while u is even do 11 u := u/2 12 if g 2 and h 2 are even then g 2 := g 2 /2, h 2 := h 2 /2 13 else g 2 :=(g 2 + b Õ )/2, h 2 :=(h 2 a Õ )/2 14 if v Ø u then v := v u, g 1 := g 1 g 2, h 1 := h 1 h 2 15 else u := u v, g 2 := g 2 g 1, h 2 := h 2 h 1 16 return (ev, eg 1, eh 1 )