Erweiterter Euklidischer Algorithmus für ganze Zahlen

Werbung
Erweiterter Euklidischer Algorithmus
Der erweiterte Euklidische Algorithmus beruht auf dem folgenden
Satz (Bachet de Méziriac)
Seien a, b ∈ Z, nicht beide gleich 0. Dann gibt es ganze Zahlen s, t mit ggT(a, b) = sa + tb.
Beweis:
Ist ggT(a, b) = sa+tb, so ist ggT(−a, b) = (−s)(−a)+tb und ggT(a, −b) = sa+(−t)(−b).
Daher können wir zum Beweis des Satzes a, b ≥ 0 annehmen. Wegen ggT(a, b) = ggT(b, a)
und ggT(a, 0) = 1 · a + 0 · 0 können wir außerdem a ≥ b > 0 annehmen.
Wir setzen a0 = a und a1 = b. Beim normalen Euklidischen Algorithmus wird nun durch
wiederholte Division mit Rest auf folgende Weise der ggT von a0 = a und a1 = b bestimmt:
a0 = q1 a1 + a2 , . . . , an−2 = qn−1 an−1 + an , an−1 = qn an + 0.
Dann ist an = ggT(a0 , a1 ).
Wir zeigen nun durch Induktion die Existenz von uj , vj ∈ Z mit aj = uj a0 + vj a1 für
j = 0, . . . , n.
Sei u0 = 1, v0 = 0 und sei u1 = 0, v1 = 1. Dann gilt die Behauptung für j = 0, 1.
Sei nun j ≥ 2 und es gelte aj−2 = uj−2 a0 + vj−2 a1 sowie aj−1 = uj−1 a0 + vj−1 a1 . Dann ist
aj = aj−2 − qj−1 aj−1 = (uj−2 − qj−1 uj−1 )a0 + (vj−2 − qj−1 vj−1 )a1 ,
also der Induktionsschluss für j. Wegen an = ggT(a0 , a1 ) folgt nun die Behauptung mit
s = un , t = v n .
Aus dem Beweis des Satzes von Bachet de Méziriac ergibt sich unmittelbar die Gültigkeit
des folgenden erweiterten Euklidischen Algorithmus, den wir nur für den Fall a, b >
0 formulieren. Der allgemeine Fall ist wie zu Beginn des obigen Beweises leicht darauf
zurückzuführen. Dabei verwenden wir folgende Bezeichnungen:
Sind x und y ganze Zahlen, y 6= 0, x = qy + r, 0 ≤ r < |y| (Division mit Rest), so ist
q = x div y und r = x mod y.
Eingabe: Natürliche Zahlen a, b, a > b.
(1) Setze x := a, y := b, s1 := 1, s2 := 0, s := 0, t1 := 0, t2 := 1, t := 1.
(2) Solange x mod y 6= 0, wiederhole:
g := x div y, r := x mod y;
s := s1 − gs2 , t := t1 − gt2 ;
s1 := s2 , s2 := s, t1 := t2 , t2 := t;
x := y, y := r.
Ausgabe: y
(= ggT(a, b)),
s, t
(y = sa + tb).
Herunterladen