Der Euklidische Algorithmus Dieter Wolke Einleitung. Für den Begriff Algorithmus gibt es keine einheitliche Definition. Eine sehr knappe findet sich in der Encyclopaedia Britannica (1985) A systematic mathe” matical procedure that produces – in a finite number of steps – the answer to a question or the solution of a problem“. Bei dem Wort Algorithmus“ handelt es sich um eine ” Verballhornung des Namens Muhammad al Khowarizmi. Sein Träger lebte im zehnten Jahrhundert in Persien und machte sich insbesondere um die Übertragung indischer Rechenbücher (Rechnen im Zehnersystem, Gebrauch der Null) ins Persische verdient. Vom Persischen gelangten diese Werke über das Arabische ins Abendland. Wann kann man einen Algorithmus als gut“ bezeichnen? ” 1. Er soll zuverlässig sein, deterministisch. Es gibt auch probabilistische, die zwar mit erdrückender Wahrscheinlichkeit, aber nicht mit letzter Sicherheit die richtige Antwort liefern. 2. Er soll leicht programmierbar sein und aus möglichst einfachen Einzelschritten bestehen. 3. Die Laufzeit soll kurz und der Speicherbedarf gering sein. 4. Eine Forderung, die weniger aus praktischen Gründen als aus mathematisch– ästhetischen Gründen gestellt werden kann: Im Algorithmus soll eine pfiffige Idee stecken. Zu den meisten algorithmisch angreifbaren Problemen gibt es eine Fülle verschiedener Verfahren, zum Beispiel bei 1) der Berechnung der n–ten Dezimalstelle der Zahl pi, 2) der Multiplikation zweier ganzer Zahlen und zahlloser anderer für Theorie und Praxis interessanter Fragestellungen. Vor allem im Zusammenhang mit kryptografischen Verfahren (Ver– und Entschlüsselung von Nachrichten) ergibt sich die Notwendigkeit, Paare riesiger (500 Dezimalstellen und mehr) natürlicher Zahlen mit größtem gemeinsamen Teiler Eins zu finden. Hierzu eignet sich hervorragend der vor etwa 2300 Jahren von Euklid in den Elementen“ be” schriebene Euklidische Algorithmus“. Bis auf geringe Abänderungen wird dieses uralte ” Verfahren noch heute benutzt, und erfüllt, wie hier gezeigt werden soll, alle oben genannten Anforderungen. 1 2. Im Folgenden soll kurz an die zugrundeliegenden und sicher überwiegend bekannten Begriffe erinnert werden. 2.1. Für a ∈ Z und d ∈ N heißt d Teiler von a, wenn es ein c ∈ Z gibt mit a = cd. Gleichbedeutend: Die Division a durch d geht auf. Kurz: d|a, andernfalls d 6 | a. Hinweis: Als Teiler sollen hier nur natürliche Zahlen d zugelassen sein, während die Vielfachen beliebig aus Z stammen können. Beispiele: 3|9, 3 6 | (−5), 7|0. Folgerung: Aus a 6= 0 und d|a folgt d ≤ |a|. Denn wegen a = cd ist c 6= 0, also |c| ≥ 1. Und somit d ≤ |c| d = |cd| = |a|. 2.2. Für a ∈ Z wird die Menge der Teiler d von a mit T (a) bezeichnet. Beispiele: T (1) = {1}, T (p) T (0) T (28) T (100) = {1, p} für jede Primzahl p, = N, T (a) = T (−a) = T (|a|), = {1, 2, 4, 7, 14, 28}, = {1, 2, 4, 5, 10, 20, 25, 50, 100}. 2.3. d heißt gemeinsamer Teiler von a und b, wenn d sowohl a als auch b teilt. Die Menge aller gemeinsamen Teiler von a und b ist der Schnitt der Mengen T (a) und T (b). 2.4. Falls mindestens eine der Zahlen a und b ungleich Null ist, besteht T (a) ∩ T (b) aus endlich vielen Elementen und hat somit ein größtes. Dies wird als größter gemeinsamer Teiler von a und b bezeichnet. Kurz: ggT (a, b) oder (a, b). Einige einfache Folgerungen. 1) Für a 6= 0 ist (a, 0) = |a|, 2) (a, b) = (−a, b) = (b, a). Sind T (a) und T (b) bekannt, dann ist (a, b) leicht zu bestimmen, z.B. (100,28) = 4. Dieses Verfahren ist für die Praxis jedoch völlig ungeeignet. Bei 150–stelligen Dezimalzahlen etwa ist das Aufstellen der Mengen T (a) unzumutbar aufwändig. 2.5. Zwei Zahlen a und b – die nicht beide = 0 sind – heißen teilerfremd, wenn (a, b) = 1 ist. 2.6. Die Division mit Rest. Zu zwei Zahlen a ∈ Z und n ∈ N gibt es eindeutig q ∈ Z und r ∈ N0 mit a = qn + r und 0 ≤ rn. r heißt der Rest bei der Division von a durch n. 2 Hinweis: Als q nimmt man die größte ganze Zahl ≤ a/n, die sogenannte Gauss– Klammer [a/n]. Der Eindeutigkeitsbeweis wird indirekt geführt. 3. Der Euklidische Algorithmus. Nach 2.4. reicht es aus, den ggT für zwei natürliche Zahlen n1 , n2 mit n1 ≥ n2 zu berechnen. Dazu führe man folgende Divisionen mit Rest durch (1) n1 = q1 n 2 + n3 , 0 < n3 < n2 (2) n2 = q2 n 3 + n4 , .. . + nk , 0 < n4 < n3 (k − 2) nk−2 = qk−2 nk−1 0 < nk < nk−1 (k − 1) nk−1 = qk−1 nk . Falls schon die erste Division aufgeht, ist offenbar (n1 , n2 ) = n2 . Da die Reste n3 , n4 , . . . eine streng abnehmende Folge natürlicher Zahlen bilden, muss das Verfahren nach spätestens n2 − 1 Divisionen abbrechen. nk ist der letzte nichtverschwindende Rest. Die Euklidische Aussage ist: ggT(n1 , n2 ) = nk . Zum Beweis wird das Schema einmal von oben nach unten und dann von unten nach oben studiert. 1. Sei g = ggT (n1 , n2 ). Dann ist insbesondere n1 = c1 g, n2 = c2 g und nach Division (1) n3 = n1 − q1 n2 = (c1 − q1 c2 )g, also g|n2 und g|n3 . Es folgt mit (2) in gleicher Weise g|n4 , usw. . . . g|nk−1 , g|nk , also (∗) g ≤ nk . 2. (k − 1) besagt nk |nk−1 . nk−1 = qk−1 nk . Dies in (k − 2) eingesetzt, ergibt nk−2 = (qk−2 qk−1 +1)nk , also nk |nk−2 . Dies erneut angewandt, gibt nk |nk−3 , usw . . . nk |n2 , nk |n1 . nk ist somit gemeinsamer Teiler von n1 und n2 , also (∗∗) nk ≤ g. (∗) und (∗∗) zusammen führen zur Behauptung nk = (n1 , n2 ). Beim Beispiel n1 = 100, n2 = 28 lautet das Schema (1) (2) (3) (4) 100 = 3 · 28 + 16 28 = 1 · 16 + 12 16 = 1 · 12 + 4 12 = 3 · 4. Vier Divisionen reichen also aus, um (100,28) = 4 zu zeigen. Schon bei so kleinen Zahlen ist dies wesentlich einfacher als die Bestimmung aller Teiler. 3 4. Diskussion des Algorithmus. Das Verfahren ist nach obigem Beweis offenbar zuverlässig. Die Einzelschritte sind denkbar einfach. Speicherplatz ist praktisch nicht erforderlich, da bei jeder Division nur die zwei vorigen Reste nötig sind. Zur Laufzeit. Falls die Restefolge nur sehr langsam abnimmt, zum Beipiel in jedem Schritt nur um einen begrenzten Betrag, ist das Verfahren für große Zahlen sicher wertlos. Dies kann zum Glück nicht eintreten, denn es gelten die Ungleichungen (∗ ∗ ∗) n3 < n1 n2 , n4 < , . . . 2 2 das heißt mehr als Halbierung der Reste nach zwei Schritten. Grob werden zum Abbau einer Zehnerpotenz höchstens sieben Schritte benötigt. Bei zwei 1000-stelligen Zahlen etwa höchstens 7000 Divisionen. Das ist großartig wenig. Die folgenden Beispiele demonstrieren dies. n1 = 320 − 1 n2 = 220 − 1 n3 n4 n5 n6 n7 n8 n9 n10 = 275 = 3 486 784 400 = 1 048 575 = 272 525 = 231 000 = 41 525 = 23 375 = 18 150 = 5 225 = 2 475 = (n1 , n2 ) 4 n1 = 350 − 1 = 717 897 987 691 852 588 770 248 n2 = 250 − 1 = 1 125 899 906 842 623 n3 240 999 047 575 748 n4 161 903 716 539 631 n5 79 095 331 036 117 n6 3 713 054 467 397 n7 1 121 187 220 780 n8 349 492 805 609 n9 72 708 805 609 n10 58 657 582 621 n11 14 051 222 988 n12 2 452 690 669 n13 1 787 769 643 n14 664 921 026 n15 457 927 591 n16 206 993 435 n17 43 940 721 n18 31 230 551 n19 12 710 170 n20 5 810 211 n21 1 089 748 n22 367 471 n23 5 335 n24 4 026 n25 1 309 n26 99 n27 22 n28 = 11 = (n1 , n2 ) Zum Beweis der ersten Ungleichung in (∗ ∗ ∗)(die anderen ergeben sich in gleicher Weise). Im ersten Fall sei n2 ≤ n1 /2. Dann gilt n3 < n2 ≤ n1 /2, wie behauptet. Ist im zweiten Fall n1 /2 < n2 < n1 , dann kann (1) nur die Gestalt n1 = 1 · n2 + n3 mit n3 < n1 /2 haben. Dass dem Euklidischen Algorithmus etwas Besonderes, keineswegs Selbstverständliches innewohnt, wird wohl jeder bestätigen. 5. Zur Häufigkeit der Paare teilerfremder Zahlen. Um Paare großer, teilerfremder Zahlen zu erhalten, wird man zufällig zwei Zahlen n1 und n2 wählen, und hoffen, dass sie mit einiger Wahrscheinlichkeit den ggT Eins liefern. Es werde für großes N w(N ) definiert als der Quotient der Anzahl der Paare n1 , n2 ≤ N mit (n1 , n2 ) = 1 und der Anzahl aller Paare n1 , n2 ≤ N , d.h. N 2 . w(N ) also die Wahrscheinlichkeit, bei zufälliger Wahl zweier Zahlen n1 , n2 ≤ N ein Paar mit 5 ggT Eins zu erwischen. Man könnte erwarten, dass w(N ) mit wachsendem N sehr klein wird, denn es stehen sehr viele Werte für den ggT zur Verfügung. Das überraschende, nicht ganz leicht zu beweisende Ergebnis ist w(N ) → 6 für N → ∞. π2 Etwa zwei Drittel aller Paare sind teilerfremd. Es bestehen somit gute Aussichten, bei gegebenem, z.B. 1000–stelligem n1 rasch viele ähnlich große n2 mit (n1 , n2 ) = 1 zu finden. 6