Stefan Lucks Diskrete Strukturen (WS 2009/10) – 57 – 2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik I I I I Uhr: Stunden mod 24, Minuten mod 60, Sekunden mod 60, . . . Rechnerarithmetik: mod 2w , w ∈ {8, 16, 32, 64} Prüfziffern mod 10 oder mod 11 ... Ein Mod-5-Zähler in Hardware 2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik Stefan Lucks Diskrete Strukturen (WS 2009/10) Division mit Rest Satz 15 Seien a ∈ N0 und n ∈ N. Dann gibt es eindeutig bestimmte q ∈ N0 , r ∈ {0, . . . , n − 1} mit a = n ∗ q + r. Ensprechend definieren wir die Operationen “ div ” und “ mod ” durch a div n = q und a mod n = r (das ganzzahlige Teilen und die Berechnung des Restes). 2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik – 58 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Die Kongruenz-Relation Definition 16 Ist a mod n = b mod n, dann sind a und b kongruent modulo n, wir schreiben a ≡ b (mod n). In welcher logischen Beziehung stehen die Aussagen “a = b mod n” und “a ≡ b (mod n)”? (Nein, das ist nicht ganz das Gleiche!) 2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik – 59 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Eigenschaften der Kongruenz-Relation Satz 17 Für alle a, b, n ∈ N gelten die folgenden Eigenschaften Reflexivität: a ≡ a (mod n) Symmetrie: a ≡ b (mod n) ⇔ b ≡ a (mod n) Transitivität: (a ≡ b (mod n)) ∧ (b ≡ c (mod n)) ⇒ (a ≡ c (mod n)) (Allgemein bezeichnet man Relationen, die reflexiv und symmetrisch und transitiv sind, als “Äquivalenzrelationen”.) Satz 18 (Regel vom Vielfachen) Für alle a, b ∈ N mit a > b gilt: (a ≡ b (mod n)) ⇔ n|(a − b). 2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik – 60 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Rechenregeln mod n Satz 19 1. (a + b) mod n = (a mod n) + (b mod n) mod n 2. (a − b) mod n = (a mod n) − (b mod n) mod n 3. (a ∗ b) mod n = (a mod n) ∗ (b mod n) mod n 4. ad mod n = (ad−x ∗ ax ) mod n = ((ad−x mod n) ∗ (ax mod n)) mod n (für x ≤ d) Bemerkung !!! Im Allgemeinen gilt ad mod n = ad mod n mod n nicht! (Die Regel für Potenzen werden wir noch kennenlernen . . . ) 2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik – 61 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Folgerungen 1. Bei Berechnungen modulo n kann man Zwischenergebnisse (alle Summen, alle Differenzen und alle Produkte) auf Werte in {0, . . . , n − 1} reduzieren. 2. Insbesondere kann man effizient ad mod n berechnen: Mit Hilfe des Square-and-Multiply Algorithmus in höchstens kubischer Zeit! 2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik – 62 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Effizientes Rechnen mod n Man berechne 4 4(4 ) (mod 7). Wir wollen die Zahl 4 4(4 ) = 1340780792994259709957402499820584612747936582059239 3377723561443721764030073546976801874298166903427690 031858186486050853753882811946569946433649006084096 keinesfalls zuerst berechnen und dann durch 7 teilen! 2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik – 63 – Stefan Lucks Diskrete Strukturen (WS 2009/10) 2.2: Anwendung: EAN- bzw. GTIN Prüfziffer EAN: 13-stellige “European Article Number”; 2009 umbenannt in “Global Trade Item Number” (GTIN), bestehend aus I Länderpräfix (z.B. 40–44 für Deutschland), I Unternehmensnummer, I Artikelnummer des Herstellers und I Prüfziffer x13 I Präfix, Unternehmensnummer und Artikelnummer zusammen 12 Ziffern x1 , . . . , x12 ∈ {0, . . . , 9}. 2: Zahlentheorie / Restklassen 2.2: Anwendung: EAN/GTIN – 64 – Stefan Lucks Diskrete Strukturen (WS 2009/10) – 65 – EAN- bzw. GTIN Prüfziffer (2) Die GTIN (x1 , . . . , x12 , x13 ) ist gültig, falls (x1 + 3x2 + x3 + 3x4 + x5 + 3x6 + · · · + x11 + 3x12 + x13 ) mod 10 = 0. I I Sei (x1 , . . . , x12 ) gegeben. Wie muss man die Prüfziffer x13 berechnen, um eine gültige GTIN zu erhalten? Erkennungsleistung: Besonders häufige Fehler (bei menschlicher Eingabe) werden meistens erkannt: 1. Veränderung einer gültigen GTIN in nur einer Ziffer erkennt man immer. (Nachrechnen!) 2. Das Vertauschen zweier benachbarter Ziffern wird meistens, aber nicht immer erkannt. (Für welche Ziffern x 6= y gilt x + 3y ≡ 3x + y mod 10?) 3. Das Vertauschen zweier beliebiger Ziffern wird in mehr als 50 % aller Fälle nicht erkannt. 2: Zahlentheorie / Restklassen 2.2: Anwendung: EAN/GTIN Stefan Lucks Diskrete Strukturen (WS 2009/10) – 66 – Warum ist die Erkennungsleistung so? Könnte man sie verbessern? Satz von Bézout Seien a, b, n ∈ N gegeben. Ist a teilerfremd zu n, dann ist die Gleichung ax ≡ b (mod n) lösbar. Es gibt genau eine Lösung x ∈ {0, . . . , n − 1}. (Werden wir noch beweisen!) I I I I Verändern einer Ziffer: 1 und 3 sind teilerfremd zu 10. Vertauschen zweier Ziffern: 2x ≡ b ist nicht eindeutig lösbar. Man beachte, dass 2 und 10 nicht teilerfremd sind! Alternative: Berechnung der Püfziffer mod 11 (Primzahl!). Problem: zusätzliche Ziffer “10” oder “verbotene” Eingaben. 2: Zahlentheorie / Restklassen 2.2: Anwendung: EAN/GTIN Stefan Lucks Diskrete Strukturen (WS 2009/10) – 67 – International Standard Book Number (ISBN – veraltet) Eine ISBN (x1 , . . . , x9 , x10 ) ist gültig, falls 1x1 + 2x2 + 3x3 + 4x4 + 5x5 + 6x6 + 7x7 + 8x8 + 9x9 ≡ x10 (mod 11). I I I I Die 11 möglichen Prüfziffern sind ∈ {0, 1, . . . , 9, ’X’}. Veränderung einer gültigen ISBN in nur einer Ziffer erkennt man immer. Das Vertauschen zweier benachbarter Ziffern erkennt man immer – und sogar das Vertauschen zweier beliebiger Ziffern! Statt der alten 10-stelligen ISBN verwendet man inzwischen 13-stellige, bestehend aus einem Pseudo-Ländercode 978, der 9-stellingen ISBN (ohne Prüfziffer) und der GTIN Prüfziffer. 2: Zahlentheorie / Restklassen 2.2: Anwendung: EAN/GTIN Stefan Lucks Diskrete Strukturen (WS 2009/10) 2.3: Der Satz von Bézout Den folgenden Satz haben wir bereits ohne Beweis behauptet. Er wird auch als “Fundamentalsatz der Arithmetik” bezeichnet: Satz 20 (Eindeutigkeit der Primzahlzerlegung) Jede Zahl n ∈ N, n ≥ 2, lässt sich eindeutig in der Form n = p1e1 ∗ p2e2 ∗ · · · ∗ pkek darstellen, wobei p1 < p2 < . . . < pk und e1 , e2 , . . . , ek ∈ N gilt. ( Beweis der Existenz induktiv; Eindeutigkeit als Widerspruchsbeweis! ) 2: Zahlentheorie / Restklassen 2.3: Der Satz von Bézout – 68 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Teilerfremde Zahlen Definition 21 Der größte gemeinsame Teiler ggT(a, b) von a, b ∈ N ist die größte natürliche Zahl, die sowohl a als auch b teilt. Zwei Zahlen a und b sind teilerfremd (wir sagen auch relativ prim), wenn ggT(a, b) = 1 ist. Die Existenz und Eindeutigkeit des ggT ergibt sich aus der Eindeutigkeit der Primzahlzerlegung. Genau dann, wenn p prim ist, gilt ggT(p, a) = 1 für alle a ∈ {1, . . . , p − 1}. 2: Zahlentheorie / Restklassen 2.3: Der Satz von Bézout – 69 – Stefan Lucks Diskrete Strukturen (WS 2009/10) – 70 – Linearkombinationen Definition 22 Linearkombinationen von zwei Zahlen a, b ∈ Z sind alle Zahlen L = ax + by, für x, y ∈ Z. Die x, y heißen Koeffizienten von L. Eine Linearkombination L = ax + by ist positiv, wenn L ∈ N. Satz 23 Die kleinste positive Linearkomb. von a und b ist ggT(a, b). Beispiel 24 Die Linearkombinationen von 4 und 6 sind {. . . , −4, −2, 0, 2, 4, . . .}, also alle geraden Zahlen in Z. Die kleinste pos. Linearkomb. von 4 u. 6 ist 2 = 6 ∗ 1 + 4 ∗ (−1). 2: Zahlentheorie / Restklassen 2.3: Der Satz von Bézout Stefan Lucks Diskrete Strukturen (WS 2009/10) Der Hilfssatz von Euklid Satz 25 Aus n|ab und ggT(a, n) = 1 folgt n|b. Folgerung 26 Ist p eine Primzahl und p|ab, dann ist p|a oder p|b. 2: Zahlentheorie / Restklassen 2.3: Der Satz von Bézout – 71 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Kürzen mod n Im Allgemeinen gilt nicht ax ≡ ay (mod n) ⇒ x ≡ y (mod n). Z.B. 10 ≡ 30 (mod 20) aber 5 6≡ 15 (mod 20). Nur wenn wir die Wahl von a einschränken, dürfen wir durch a kürzen: Satz 27 (Kürzungsregel) Ist a teilerfremd zu n und ax ≡ ay (mod n), dann gilt x ≡ y (mod n). 2: Zahlentheorie / Restklassen 2.3: Der Satz von Bézout – 72 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Lösbare lineare Gleichungen Satz 28 (Satz von Bézout) Seien a, b, n ∈ N gegeben. Ist a relativ prim zu n, dann ist die Gleichung ax ≡ b (mod n) lösbar. Es gibt genau eine Lösung x ∈ {0, . . . , n − 1}. Beispiel: 3x ≡ 7 mod 8. Folgerung 29 Ist a relativ prim zu n, dann ist die Funktion πa : {0, . . . , n − 1} → {0, . . . , n − 1}, eine Permutation. 2: Zahlentheorie / Restklassen 2.3: Der Satz von Bézout πa (x) = ax mod n – 73 – Stefan Lucks Diskrete Strukturen (WS 2009/10) 2.4: Der Restklassenring mod n Modulo n sind alle Werte a ± kn äquivalent. Wir interessieren uns für die Menge der echt verschiedenen Werte, d.h., für a1 , a2 , . . . mit ai 6≡ aj (mod n) : Definition 30 Seien n ∈ N und a ∈ Z. Die Restklasse von a modulo n ist {kn + a|k ∈ Z} Ein Element einer Restklasse bezeichnet man auch als Repräsentant der Restklasse. Die natürlichen Repräsentanten sind die Zahlen 0, . . . , n − 1. Die Menge aller Restklassen modulo n, geschrieben Zn , bildet, zusammen mit der Addition und der Multiplikation, den Restklassenring mod n. 2: Zahlentheorie / Restklassen 2.4: Der Restklassenring mod n – 74 – Stefan Lucks Diskrete Strukturen (WS 2009/10) – 75 – Bemerkungen I I I I I Jede Restklasse hat genau einen natürlichen Repräsentanten a ∈ {0, . . . , n − 1}, aber unendlich viele beliebige Repräsentanten a + kn ∈ Z. Nie vergessen: Mathematisch bedeutet eine Berechung in Zn , dass egal ist, wie eine Restklasse repräsentiert wird! Zn besteht aus genau n Restklassen. In Zn können wir rechnen wie in Z (→ Rechenregeln mod n), bis auf die etwas andere → Kürzungsregel. Wenn klar ist, das wir für ein bestimmtes n in Zn rechnen, können wir statt “a ≡ b (mod n)” auch “a = b” schreiben. 2: Zahlentheorie / Restklassen 2.4: Der Restklassenring mod n Stefan Lucks Diskrete Strukturen (WS 2009/10) Der Begriff “Ring” Was genau ein “Ring” ist, werden wir im Kapitel über endliche algebraische Strukturen definieren. Für uns ist wichtig: In Zn gelten, wie in Z, die folgenden arithmetischen Gesetze: I Assoziativgesetze: I I I Kommutativgesetze: I I I I I Addition: a + b = b + a und Multiplikation: ab = ba. Neutrale Elemente: I I Addition: a + (b + c) = (a + b) + c und Multiplikation: a(bc) = (ab)c. Addition: 0 + a = a + 0 = a und Multiplikation: a1 = 1a = a. Inverses Element der Addition: a + (−a) = 0. Distributivgesetz: a(b + c) = ab + ac 2: Zahlentheorie / Restklassen 2.4: Der Restklassenring mod n – 76 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Division in Zn I I I In Z ist die ganzzahlige Division nur partiell definiert: a/b = c, falls es ein c ∈ Z gibt mit bc = a. Z.B. ist 3 ∗ 4 = 12, 3 ∗ 5 = 15, und ensprechend sind 12/4 und 15/5 in Z definiert, aber 13/3 und 14/5 nicht. Auch in Zn wollen wir die Division zumindest partiell definieren. Beispiel Z10 : I I I I 4 ∗ 3 = 2 und 3 ∗ 5 = 5. Analog zu Z müsste 2/3 = 4 und 5/5 = 3 gelten. 5/5 = 3? Kann doch nicht sein! Tatsächlich ist 1 ∗ 5 = 3 ∗ 5 = 5 ∗ 5 = 7 ∗ 5 = 9 ∗ 5 = 5, also könnte 5/5 eine beliebige ungerade Zahl sein . . . Und 2/5? D.h. k ∈ N mit 2k ≡ 5 (mod 10)? Gibt’s nicht! 2: Zahlentheorie / Restklassen 2.4: Der Restklassenring mod n – 77 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Multiplikative Inverse modulo n Definition 31 Sei a ∈ Zn . Das multiplikative Inverse von a mod n ist ein Wert a−1 mit a ∗ a−1 ≡ 1 (mod n). Beispiel 32 Das multiplikative Inverse von 3 mod 10 ist (→ Tafel) Es gibt kein multiplikatives Inverses von 5 mod 10, denn in Z10 gilt k 5 ∈ {0, 5} für alle ganzen k . Satz 33 In Zn existiert das multiplikative Inverse einer ganzen Zahl a modulo n genau dann, wenn a teilerfremd zu n ist. (Satz von Bézout, Widerspruchsbeweis) 2: Zahlentheorie / Restklassen 2.4: Der Restklassenring mod n – 78 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Division in Zn – jetzt richtig I I I Wenn ein multiplikatives Inveres von b in Zn existiert, dann ist a/b = a ∗ b−1 . Wenn ein solches Inverses nicht existiert, dann ist a/b nicht definiert. Wenn man in Zn rechnet, darf man niemals (!!!) a/b ∈ Q verwenden . . . denn a und b sind Restklassen, die jeweils unendlich viele verschiedene Zahlen als Repräsentanten haben können. (Anders als in Z, wo a und b eindeutig bestimmte Zahlen sind, und a/b ∈ Q für b 6= 0 eindeutig bestimmt ist.) 2: Zahlentheorie / Restklassen 2.4: Der Restklassenring mod n – 79 – Stefan Lucks Diskrete Strukturen (WS 2009/10) 2.5: Die Berechnung des Inversen in Zn Frage 1: Wie können wir effizient feststellen, ob b−1 mod n existiert? D.h.: Wie kann man den ggT von a und n berechnen? Frage 2: Wie können wir b−1 mod n effizient berechnen? Denn: “Teste für alle x ∈ Zn , ob ax mod n = 1 gilt” funktioniert zwar, ist aber nur für kleine n effizient. 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn – 80 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Die brutale Berechnung des ggT: Eine Nicht-Antwort auf Frage 1 Eingabe: a, b ∈ N Ausgabe: ggT(a, b) Algorithmus: for i from min{a, b} downto 1 do if i|a and i|b then return i end if end for 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn – 81 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Warum keine Antwort auf Frage 1? Der Algorithmus funktioniert doch . . . Beispiel: I I I Für alle Z ∈ N gilt ggT(2Z − 1, 2Z − 2) = 1. (Warum?) Der Brutal-Algorithmus probiert 2Z − 2 verschiedene Teiler i, bis er endlich mit i = 1 den ggT findet. Ersetzt man Z durch Z + 1, I I dann werden die Zahlen nur um 1 Bit länger, aber die Laufzeit des Algorithmus verdoppelt sich! Allgemein: Die Laufzeit zur Berechnung des ggTs zweier Z -bit Zahlen (d.h., für a, b < 2Z die Berechnung von ggT(a, b)) kann sich etwa proportional zu 2Z verhalten. I Eine solche Laufzeit nennt man exponentiell. =⇒ Exponentielle Laufzeiten sind schlecht! I 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn – 82 – Stefan Lucks Diskrete Strukturen (WS 2009/10) – 83 – Zwei hilfreiche Eigenschaften des ggT Satz 34 1. Ist b|a, dann ist ggT(a, b) = b. 2. Ist r = a mod b, dann ist ggT(a, b) = ggT(b, r ). (Zweite Beh.: r = a mod b entspricht r = a − bx für ein x ∈ N0 . (a) Jeder gemeinsame Teiler von a und b teilt auch r . (b) Jeder gemeinsame Teiler von b und r teilt auch a = bx + r .) 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn Stefan Lucks Diskrete Strukturen (WS 2009/10) Antwort auf Frage 1: Der Euklidische Algorithmus zur Berechung des ggT Eingabe: a, b ∈ N Ausgabe: ggT(a, b) Algorithmus: r := a mod b while r 6= 0 do a := b b := r end while return b 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn – 84 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Die Laufzeit des Euklidischen Algorithmus Satz 35 Seien a und b Z -bit Nummern, d.h., a, b < 2Z . Dann terminiert der Euklidische Algorithmus spätestens nach 2Z Schleifendurchläufen. (Für a ≥ b gilt: a ≥ b + r > 2r .) 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn – 85 – Stefan Lucks Diskrete Strukturen (WS 2009/10) Zwei Varianten des Euklidischen Algorithmus Eingabe: a, b ∈ N Ausgabe: ggT(a, b) Eingabe: a, b ∈ N Ausgabe: ggT(a, b) Algorithmus (iterativ): r := a mod b while r 6= 0 do a := b b := r end while return b Algorithmus (rekursiv): r := a mod b if r = 0 then return b else return ggT(b, r ) end if 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn – 86 – Stefan Lucks Diskrete Strukturen (WS 2009/10) – 87 – Worin unterscheiden sich die beiden Varianten? I I I I I der gleiche Algorithmus (die gleichen Werte a, b, und r ) Laufzeit: # Schleifendurchläufe = # rekursiver Aufrufe Laufzeitanalyse (scheinbar) einfacher bei iterativer Variante Korrektheit klarer bei rekursiver Variante beim Rechnen von Hand finde ich die rekursive Variante einfacher, z.B., ggT(50, 23) = ggT(23, 4) = ggT(4, 3) = ggT(3, 1) = 1. 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn Stefan Lucks Diskrete Strukturen (WS 2009/10) Beispiele Berechne ggT(33, 27), ggT(343, 77) und ggT(3343, 77). ggT(a, b) Gleichung r ggT(33, 27) 33 = 1 ∗ 27 + 6 6 ggT(27, 6) 27 = 4 ∗ 6 + 3 3 ggT(6, 3) 6=2∗3+0 0 Ergebnis=3 ggT(343, 77) 343 = 4 ∗ 77 + 35 35 ggT(77, 35) 77 = 2 ∗ 35 + 7 7 ggT(35, 7) 35 = 5 ∗ 7 + 0 0 Ergebnis=7 ggT(3343, 77) 3343 = 43 ∗ 77 + 32 32 ggT(77, 32) 77 = 2 ∗ 32 + 13 13 ggT(32, 13) 32 = 2 ∗ 13 + 6 6 ggT(13, 6) 13 = 2 ∗ 6 + 1 1 ggT(6, 1) 6=6∗6+0 0 Ergebnis=1 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn – 88 – Stefan Lucks Diskrete Strukturen (WS 2009/10) – 89 – Gesucht: Die Koeffizienten der Linearkombination ggT Beobachtung Sei ggT(a, b) = 1. Dann ist 1 die kleinste positive Linearkombination von a und b. D.h., es gibt Koeffizienten x und y mit ax + by = 1. Wenn wir diese Koeffizienten kennen, dann können wir multiplikative Inverse berechnen: ax ≡ 1 (mod b), also a−1 ≡ x (mod b). Genauso: b−1 ≡ y (mod a). 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn Stefan Lucks Diskrete Strukturen (WS 2009/10) Zwei hilfreiche Beobachtungen, neu aufgemischt Satz (bereits bekannt) 1. Ist b|a, dann ist ggT(a, b) = b. 2. Ist r = a mod b, dann ist ggT(a, b) = ggT(b, r ). Satz 36 1. Ist b|a, dann ist b = ggT(a, b) = 0a + 1b. 2. Ist z = a div b und ggT(a, b) = xb + yr , dann ggT(a, b) = ggT(b, r ) = ya + (x − zy)b. 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn – 90 – Stefan Lucks Diskrete Strukturen (WS 2009/10) – 91 – Der Erweiterte Euklidische Algorithmus (→ Frage 2) Eingabe: a, b ∈ N, a < n Ausgabe: (d, x, y ), d = ggT(a, b) ∈ N x, y ∈ Z : ax + by = d Algorithmus XggT(a, b): r := a mod b if r = 0 then return (b, 0, 1) (∗ b = ggT(a, b) = 0a + 1b ∗) else (d, x, y ) := XggT(b, a mod b) (∗ d = ggT(a, b) = xb + yr ∗) z := a div b return (d, y , x − zy ) (∗ d = ggT(a, b) = ya + (x − zy )b ∗) end if 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn Stefan Lucks Diskrete Strukturen (WS 2009/10) – 92 – Eigenschaften des EEA 1. Laufzeit: Genau so viele rekursive Aufrufe, wie beim Euklidischen Algorithmus 2. Korrektheit: 2.1 d = ggT(a, b): Gleiche Operationen wie beim Euklidischen Algorithmus 2.2 ax + by = d: Induktiv (Anfang: r = 0) r := a mod b if r = 0 then return (b, 0, 1) (∗ b = ggT(a, b) = 0a + 1b ∗) else (d, x, y ) := XggT(b, a mod b) (∗ d = ggT(a, b) = xb + yr ∗) z := a div b return (d, y , x − zy ) (∗ d = ggT(a, b) = ya + (x − zy )b ∗) end if 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn Stefan Lucks Diskrete Strukturen (WS 2009/10) Beispiel (1) Berechne den erweiterten ggT von 33 und 27 und – wenn vorhanden – das multiplikative Inverse von 27 mod 33. ggT(a, b) ggT(33, 27) ggT(27, 6) ggT(6, 3) Gleichung 33 = 1 ∗ 27 + 6 27 = 4 ∗ 6 + 3 6=2∗3+0 r, z r = 6, z = 1 r = 3, z = 4 r =0 Ergebnis (3,-4,5) (3,1,-4) (3,0,1) Probe: 33 ∗ (−4) + 27 ∗ 5 = −132 + 135 = 3 Man beachte die Reihenfolge in der Berechnung: zuerst links von oben nach unten, dann rechts von unten nach oben! 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn – 93 – Stefan Lucks Diskrete Strukturen (WS 2009/10) – 94 – Beispiel (2): 77−1 mod 3343 ggT(a, b) Gleichung ggT(3343, 77) 3343 = 43 ∗ 77 + 32 ggT(77, 32) 77 = 2 ∗ 32 + 13 ggT(32, 13) 32 = 2 ∗ 13 + 6 ggT(13, 6) 13 = 2 ∗ 6 + 1 ggT(6, 1) 6=6∗6+0 r z Ergebnis 32 43 (1, −12, 521) 13 2 (1, 5, −12) 6 2 (1, −2, 5) 1 2 (1, 1, −2) 0 — (1, 0, 1) 1=0∗6+1∗1 1 = 1 ∗ 13 + (−2) ∗ 6 = 13 − 12 1 = (−2) ∗ 32 + 5 ∗ 13 = −64 + 65 1 = 5 ∗ 77 + (−12) ∗ 32 = 385 − 384 1 = (−12) ∗ 3343 + 521 ∗ 77 = −40116 + 40117 “Heureka! Alles stimmt!” Ergebnis: 521 ∗ 77 − k ∗ 3343 = 1 ⇒ 77−1 ≡ 521 (mod 3343). Probe: (0) (1) (2) (3) (4) 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn Stefan Lucks Diskrete Strukturen (WS 2009/10) – 95 – Iterative Variante Es gibt auch eine iterative Variante des Erweiterten Euklidischen Algorithmus. Suchen Sie in einem Mathebuch Ihrer Wahl oder im Internet nach einer Beschreibung der iterativen Variante. Siehe z.B. http://www-dm.informatik.uni-tuebingen.de/ lehre/kryptoVL/ws0607/EGGT.pdf 2: Zahlentheorie / Restklassen 2.5: Die Berechnung des Inversen in Zn