Erweiterter euklidischer Algorithmus

Algorithmus zur Berechnen des größten gemeinsamen Teilers
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 23. Juni 2006 um 03:58 Uhr durch Stefan Birkner (Diskussion | Beiträge) (Funktionsweise: erw rekursive Variante). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Der erweiterte euklidische Algorithmus ist ein Algorithmus aus dem mathematischen Teilgebiet der Zahlentheorie. Er berechnet neben dem größten gemeinsamen Teiler zweier natürlicher Zahlen und noch zwei ganze Zahlen und die die folgende Gleichung erfüllen

Wie der Name schon aussagt ist dieser Algorithmus eine Erweiterung des bereits in der Antike bekannten euklidischen Algorithmus zur Berechnung des größten gemeinsamen Teilers. Die Erweiterung liefert einen konstruktiven Beweis für das Lemma von Bézout.

Die Darstellung als Linearkombination (selten auch Vielfachsummendarstellung genannt) liefert das multiplikative Inverse von a modulo b, falls a und b teilerfremd sind, d. h. . In diesem Fall ist s das multiplikative Inverse.

Funktionsweise

Zur Berechnung werden die Variablen m, n, s, t, u und v verwendet. Diese werden wie folgt initialisiert:

  • Setze m = a, n = b, s = 1, t = 0, u = 0, v = 1
  • Wiederhole solange n ≠ 0
  1. Berechne q und r mit m = q * n + r (Division mit Rest)
  2. Setze m = n, n = r, u' = s - q * u, v' = t - q * v
  3. Setze s = u, t = v, u = u', v = v'

Nach Beendigung ist  .

Man kann dieses Vorgehen in der folgenden Form übersichtlich darstellen:

 

Dabei ist q der ganzzahlige Anteil von m/n.

Man zieht also immer von der vorletzten Zeile die mit q multiplizierte letzte Zeile ab, um die nächste Zeile zu erhalten. Wenn die Abbruchbedingung n=0 erfüllt ist, gilt m = r = ggT(a,b) und folglich

 

Rekursive Variante

Für den erweiterte euklidische Algorithmus existiert auch eine rekursive Variante, die durch den folgenden Pseudocode gegeben ist:[1]

a,b: zwei Zahlen für die der erweiterte euklidische Algorithmus durchgeführt wird

extended_euclid(a,b)
1  wenn b = 0
2      dann return (a,1,0)
3  (d',s',t')   extended_euclid(b, a mod b)
4  (d,s,t)   (d',y',x' - floor(a/b)y')
5  return (d,s,t)

Beziehung zu Kettenbrüchen

Die Folge der auftretenden Zahlen   liefert die Kettenbruchdarstellung von  . Z. B. ergibt sich für   und  :

 

Also ist   und

 

Quelltext

Unter MATLAB könnte der Algorithmus wie folgt implementiert werden:

function a=eeuklid(a,b)

m=a; n=b;
s=1; t=0;
u=0; v=1;

while n>0
  q=floor(m/n); % Der Quotient wird abgerundet
  r=m-q*n;
  m=n; n=r;
  tmp=u; u=s-q*u; s=tmp;
  tmp=v; v=t-q*v; t=tmp;
end

a=[m,s,t];

Anwendungsbeispiele

Umfangreiche Arbeit u.a. zum euklidischen Algorithmus

Ein kleines Script findet sich unter http://www.mirsky.de/ggt.php. Jeder Schritt wird genau erklärt. Außerdem gibt es noch ein ausführliches Skript mit Quelltext unter [1].

  1. Thomas H. Cormen, Charles Leiserson, Ronald L. Rivest: Introduction to Algorithms. MIT Press, 2001, ISBN 0262531968