Der Euklidische Algorithmus Vorlesung Grundlagen und Einzelfragen der Mathematik Berechnung des ggT Der Euklidische Algorithmus ist einer der ersten Algorithmen der Mathematik überhaupt. Er wurde in der Antike durch Euklid entwickelt, und berechnet zu einem Paar (a, b) den größten gemeinsamen Teiler ggT(a, b). Er verwendet die folgenden Eigenschaften des ggT: • ggT(a, b) = ggT(b, a), • ggT(a, b) = ggT(a, b − qa) für alle q ∈ Z. Die beiden Identitäten werden sukzessive angewendet, bis der Ausdruck ggT(a, b) in die Form ggT(g, 0) gebracht wurde, woraus ggT(a, b) = ggT(g, 0) = g folgt. Es ist zunächst klar, dass ggT(a, b) = ggT(b, a) ist. Ist q ∈ Z beliebig und d irgend ein gemeinsamer Teiler von a und b, etwa a = a0 d und b = b0 d, so gilt b − qa = b0 d − qa0 d = d · (b0 − qa0 ), d. h. d ist auch ein Teiler von a und b − qa für alle q ∈ Z. Teilt dagegen ein d die Zahlen a und b − qa, so auch b − qa + qa = b. Also stimmen die Teiler überein und damit auch deren Maximum, der ggT. Damit können die beiden Identitäten auf den Ausdruck ggT(a, b) angewendet werden, ohne seinen Wert zu ändern. Ein typischer Ablauf sieht wie folgt aus: (7, 25) → q=3 (7, 4) → (4, 7) → q=1 (4, 3) → (3, 4) → q=1 (3, 1) → (1, 3) → q=3 (1, 0) Daraus folgt ggT(7, 25) = 1. Tabellarische Notation Wird der Euklidische Algorithmus als Computerprogramm formuliert, so ist die obige Notation völlig ausreichend. Für eine übersichtliche Rechnung auf dem Papier (zum Beispiel in einer Prüfung) und die folgende Verallgemeinerung auf den ELBA bietet sich dagegen eine tabellarische Notation der Rechenschritte an. Dazu tauscht man ggf. die Zahlen, so dass a > b ist, und setzt a1 = a und a2 = b. Danach wendet man sukzessive den Rekursionsschritt an := an−2 − qn · an−1 c, das ist gerade die Division mit Rest von mit dem größtmöglichen qn ∈ N0 an. Konkret ist qn = b aan−2 n−1 an−2 durch an−1 mit dem Quotienten qn und dem Rest an . Die definierende Eigenschaft der Division mit Rest ist es, dass der Betrag des Rests an stets kleiner ist als der Betrag des Divisors an−1 , d. h. die Beträge der so konstruierten Folge sind streng monoton fallend, was wegen aj ∈ Z nach endlich vielen Schritten zu an = 0 führen muss. Wie im Euklidischen Algorithmus ist dann das letzte nichttriviale Folgenglied gerade der ggT. In der zugehörigen Tabelle werden der Übersicht wegen die Reste an sowie die Quotienten qn notiert. Die Notation der Rechnung für a = 25 und b = 7 sieht dann wie folgt aus: n an qn 1 25 2 7 3 4 3 4 3 1 5 1 1 6 0 3 Der letzte nichttriviale Rest a5 ist Eins wie erwartet. 1 ELBA Ist ggT(a, b) = g, so gibt es stets Koeffizienten r, s ∈ Z mit ra + sb = g, d. h. der ggT ist stets linear über Z kombinierbar. Der Euklidische Algorithmus kann erweitert werden, so dass er neben g auch die Koeffizienten r, s ∈ Z berechnet (die im Allgemeinen nicht eindeutig sind). Dieses Verfahren ist unter der Abkürzung ELBA bekannt (Euklid-Lagrange-Berlekamp-Algorithmus). Dabei wird die Tatsache ausgenutzt, dass die Identitäten aus der Herleitung des Euklidischen Algorithmus für den ggT auch für die Koeffizienten gelten. Die beiden Operationen Tauschen“ und Modulus abziehen“ ” ” werden beim ELBA parallel zum ggT auch auf das Paar (1, 0) angewendet (es gilt damit in jedem Schritt der Rechnung, dass ra + sb gerade der Rest der letzten Umformung ist, d. h. im vorletzten Schritt ist ra + sb = g). Die Werte der Koeffizienten werden wie die Reste als Folgen (rn ) und (sn ) aufgefasst und in der Tabelle mitgeführt, dabei sind in jedem Schritt wie die Werte rn bzw. sn als Reste mit dem Quotienten qn zu berechnen: rn := rn−2 − qn · rn−1 sn := sn−2 − qn · sn−1 Der Quotient qn stammt aus der Division mit Rest der (an )-Glieder des ursprünglichen Verfahrens. Es wird r1 = 1 und s1 = 0 gesetzt, damit im ersten Schritt r1 a1 + s1 a2 = a1 gilt, bzw. r2 = 0 und s2 = 1, d. h. r2 a1 +s2 a2 = a2 . Wird die obige Rekursionsvorschrift angewendet, so gilt in jedem Schritt rn a1 + sn a2 = an wie gewünscht. Für das vorige Beispiel ergibt sich die folgende Tabelle, in der die Koeffizienten rn und sn in jeder Zeile den Rest an aus den ursprünglichen Zahlen a und b kombinieren: n an qn 1 25 2 7 3 4 3 1 4 3 5 1 1 6 0 3 rn 1 0 1 -1 2 -7 sn 0 1 -3 4 -7 25 Daraus ergibt sich die Linearkombination des ggT zu 2 · 25 + (−7) · 7 = 1. Modulares Invertieren Der erweiterte Euklidische Algorithmus kann verwendet werden, um im endlichen Körper Zp = GF(p) (p Primzahl) ein Element zu invertieren. Dazu sei a 6≡ 0 mod p irgend ein Element mit einem Vertreter a ∈ {1, . . . , p−1}. Wegen a < p ist der ggT von a und der Primzahl p gerade Eins, also können mit dem ELBA Koeffizienten r, s ∈ Z ermittelt werden, so dass ra + sp = 1 gilt. Wir nehmen diese Gleichung modulo p, und erhalten wegen sp ≡ 0 die Gleichung ra ≡ 1 mod p. Also ist r mod p das Inverse zu a mod p in Zp . Als Beispiel sei 5 mod 7 zu invertieren. Berechnen der Koeffizienten mit dem ELBA ergibt 3 · 5 + (−2) · 7 = 1, also ist 3 ≡ 5−1 das Inverse zu 5 mod 7 in Z7 .