Der euklidische Algorithmus Manfred Gruber http://www.lrz-muenchen.de/~gruber SS 2010, KW 22 M. Gruber, SS 2010 Diskrete Mathematik Größter gemeinsamer Teiler Definition 1. [Teiler] Eine Zahl m 2 N ist Teiler n von n 2 Z, wenn der Quotient m 2 Z ist. Ist m Teiler von n, schreibt man m j n, andernfalls m - n. Definition 2. [ggT] Größter gemeinsamer Teiler (ggT) zweier Zahlen m; n 2 Z ist diejenige größte Zahl, die zugleich Teiler von m und n ist. Diese Zahl ist eindeutig bestimmt und wird mit ggT(m; n) bezeichnet. Bemerkung 1. Für n > 0 ist ggT(0; n) = n, denn n teilt 0 und n, andrerseits können Teiler von 0 und n nicht größer als n sein. Bemerkung 2. ggT(0; 0) ist nicht definiert, denn die Menge der Teiler von 0 ist unbeschränkt und hat kein Maximum. 1 M. Gruber, SS 2010 Diskrete Mathematik Primzahlen Definition 3. [teilerfremd] Zwei Zahlen m; n Z heißen teilerfremd, wenn ggT(m; n) = 1 ist. 2 Definition 4. [prim] Eine Zahl p > 1 heißt prim (Primzahl), wenn 1 und p die einzigen Teiler von p sind. Bemerkung 3. Ist p prim, so ist allen positiven Zahlen kleiner p. p teilerfremd zu Satz 1. [Fundamentalsatz der Arithmetik] Jede Zahl n 2 N kann als Produkt von Primzahlen n = 1 pm p dargestellt werden und unter der Bedingung 1 : : : pm: p ist diese Darstellung eindeutig. 2 M. Gruber, SS 2010 Diskrete Mathematik floor, modulo Definition 5. [floor] Für x 2 R bezeichnet bxc (“floor x”, “ganzzahliger Anteil von x”) die größte Zahl aus Z, die kleiner oder gleich x ist. Eine Zahl x “mit Rest” durch eine Zahl y dividieren heißt: Ermitteln, welches ganzzahlige Vielfache von y in x enthalten ist. Den verbleibenden Rest nennt man “x mod y ”: Definition 6. [modulo] Für x Im Fall y =0 mod y = x x; y b y legt man fest: 2 Z ist x=y b x=y c : c = 0. Beispiel 1. b5 3c = 2 ( 3) b5 ( 3)c = 1 5 3 b 5 3c = 1 ( 3) b 5 ( 3)c = 5 mod 3 = 5 5 mod 3=5 5 mod 3 = 5 mod 3= 5 3 = ; = ; = = ; 2: 3 M. Gruber, SS 2010 Diskrete Mathematik Klassischer euklidischer Algorithmus Den größten gemeinsamen Teiler ggT(m; n) zweier Zahlen m; n 2 Z mit 0 m < n kann man nach Euklid rekursiv berechnen durch ggT(0; n) = n ggT(m; n) = ggT(n mod m; m); (1) m > 0:(2) (1) und (2) beschreiben zusammen einen Rekursionsalgorithmus. (2) stellt gleichzeitig eine Behauptung dar. 1. Die Rekursion muss nach endlich vielen Schritten enden, nämlich dann, wenn sich für n mod m Null ergibt. 2. Die Behauptung, die in (2) steckt, ist wahr, da jeder gemeinsame Teiler von m und n auch gemeinsamer Teiler von n mod m = n m b c und n=m Beispiel 2. ggT(54; 87) = ggT(21; 33) = ggT(12; 21) ggT(3; 9) = ggT(0; 3) = 3. m ist und umgekehrt. ggT(33; 54) = ggT(9; 12) = = 4 M. Gruber, SS 2010 Diskrete Mathematik Erweiterter euklidischer Algorithmus Der ggT(x1; x0) (0 durch die Rekursion x +1 = xi 1 xi die mit Mit qi 2 3 6 x i 6 6 6 4 7 7 7 7 5 +1 xi Aus xn = b xi 1=xic und 6x 6 i Qi 6 6 4 xi 3 2 6 x n 6 6 6 4 7 7 7 7 5 6a 6 6 6 4 +1 xi b = Qi = 3 2 3 7 5 6 x n 6 6 6 4 7 7 7 7 5 1777 2 xn < x 0) wird berechnet xi 1=xic ; (3) +1 = 0 und ggT(x1;2x0) = x3n 6= 0 endet. 2 = 1 und xn 32 +1 60 6 6 6 4 1 1 qi 7 7 7 7 5 gilt 2 = Qn Qn | 1 {z =: a b 3 0777 1 75 x1 6x 6 Q 6 6 }4 3 76 76 54 07 7 folgt die Darstellung 5 x1 = ax 6 7 b7 7 6x 7 ggT(x1; x0) = xn 0 + bx1 (a; b 2 Z) : (4) 5 : M. Gruber, SS 2010 Diskrete Mathematik Beispiel 3. Mit den Zahlen von Beispiel 2 gilt 2 6777 7 5 x7 6x 6 6 6 4 = 3 32 2 3 60 6 6 6 4 1 1 7 7 7 7 5 3 60 6 6 6 4 1 32 2 = 5 6 6 6 6 4 18 1 7 7 7 7 5 1 52 3 6877 7 6 7 6 7 6 5 4 54 3 877 668777 29 76 76 54 7 7 5 54 2 3 = 637 6 7 6 7 6 7 4 5 0 und damit ggT(54; 87) = 5 87 + ( 8) 54 = 3 : Aus dieser Beziehung kann man z.B. ablesen, dass ( 8) 54 mod 87 = 79 54 mod 87 = 3 ist. 6 M. Gruber, SS 2010 Diskrete Mathematik Effizienz des euklidischen Algorithmus Benachbarte Fibonacci-Zahlen sind teilerfremd. Dies sieht man, wenn man die rekursive Berechnung der FibonacciZahl Fn +1 “aufrollt” und die entstehenden Gleichungen als euklidische Divisionen interpretiert: F c Fn + Fn+1 mod Fn +1 = 1 Fn + Fn 1 = b nF+1 n Fn Fn =1 Fn 1 + Fn 2 = b Fnn 1 c Fn 1 + Fn mod Fn 1 F ... F 2 = 1 F1 + F0 = b F21 c F1 + F2 mod F1 F Diese Gleichungen zeigen noch etwas: Die Fibonacci-Zahlen Fn +1; Fn sind die kleinsten Eingabedaten des euklidischen Algorithmus, die zu n Divisionen mit Rest führen. d.h. sind zur Berechnung des ggT zweier beliebiger Zahlen mindestens n Schritte erforderlich, so ist x0 Fn x 1 0 < x +1. Es lässt sich daraus herleiten, dass die Anzahl benötigter Divisionen mit Rest beim euklidischen Algorithmus höchstens linear mit der Stellenzahl der Eingabedaten wächst. 7 M. Gruber, SS 2010 Diskrete Mathematik Literatur [CM] Ronald L. Graham, Donald E. Knuth and Oren Patashnik, Concrete Mathematics: A Foundation for Computer Science. Addison-Wesley, 1989; second edition, 1994. http://www-cs-faculty.stanford.edu/~knuth/ gkp.html 8