Der Euklidische- und erweiterte Euklidische Algorithmus

Der Euklidische Algorithmus

Der Euklidische Algorithmus dient dazu, den größten gemeinsamen Teiler (ggT) zweier natürlicher Zahlen zu ermitteln. Das Ermitteln des ggT findet in der Kryptographie bei vielen Kryptosystemen Anwendung.

Beispiel:
Es soll für zwei natürliche Zahlen a=285 und b=33 der ggT(285,33) ermittelt werden.
Formal kann die Ausgangssituation wie folgt beschrieben werden:  a=q \cdot b + r (r steht hierbei für den Rest der ganzahligen Division).

Beispiel für a=285 und b=33:
285=8 \cdot 33 + 21
33=1 \cdot 21 + 12
21=1 \cdot 12 + 9
12= 1 \cdot 9 + 3
9= 3 \cdot \textbf{3} + 0

In der letzten Zeile kann der ggT(285,33)=3 abgelesen werden (fett gedruckte 3). Die Berechnung des ggT ist abgeschlossen, sobald der Rest (r) den Wert 0 angenommen hat.

Kompakter kann der ggT(285,3) auch in Form einer Tabelle ermittelt werden:

abr
2853321
332112
21129
1293
930

Die Spalte b in der letzten Zeile liefert das Ergebnis ggT(285,33)=3.

Als Python-Programm lässt sich die Ermittlung des ggT wie folgt implementieren:

def ggt(a ,b):
    while b!=0:
        a ,b = b, a % b
    return a

if __name__ == '__main__':
    a = 285
    b = 33
    print("Ausgabe ggt: ", ggt(a, b))

Der erweiterte Euklidische Algorithmus

Der erweiterte Euklidische Algorithmus wird u. a. dazu verwendet lineare diophantische Gleichungen der Form a \cdot x + b \cdot y = ggT(a,b) zu lösen. Vielfache des ggT(a,b) sind ebenfalls lösbar und können allgemein mit a \cdot x \cdot z + b \cdot y \cdot z=z \cdot ggT(a,b) für z \in \mathbb{Z} beschrieben werden.

Beispiel:
Gegeben sei die lineare diophantische Gleichung:

285 \cdot x + 81 \cdot y = 3 \\
Zuerst wir der Euklidische Algorithmus wie zuvor durchgeführt:

285 = 3 \cdot 81 +  42\\
81 = 1 \cdot 42 + 39 \\
42 = 1 \cdot 39 + 3 \\
39 = 3 \cdot 13 + 0 \\
Die Werte werden nun in eine Tabelle übertrage. Diese Tabelle erhält neben den Spalten für a, b und r noch zusätzlich die Spalten für die Werte q,  x und y. Die Spalte r spielt bei der Berechnung von x und y keine Rolle und kann auch weggelassen werden.

abqrxy
285813422-1-3 \cdot 2=-7
8142139-11-1 \cdot (-1)=2
42391310-1 \cdot 1=-1
39133001-3 \cdot 0=1
13010

Hierbei gilt für die Berechnungen der Werte für die Spalten x und y:

  • in die letzte Zeile wird immer für x=1 und y=0 eingetragen und
  • anschließend wird sich sukzessive Zeile für Zeile nach oben gearbeit, wobei gilt:

x=y_{alt} \ und \ y=x_{alt}-q \cdot y_{alt}

Als Lösung für das obige Beispiel gilt demnach:
L=\{(x,y) \ | \ \{2,-7\} \} \\
Probe: 285 \cdot 2 + 81 \cdot (-7)=3

In Python lassen sich die Werte für x und y sowie der ggT(285,81) wie folgt ermitteln:

def extgcd(a, b):
    x, y, xi, yi = 1, 0, 0, 1
    while b!=0:
        q=a//b
        a, b = b, a-q*b
        y, yi = yi, y-q*yi
        x, xi = xi, x-q*xi
    return a, x, y

if __name__ == '__main__':
    print("Werte a, x, y: ", extgcd(285, 81))

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.