<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Erweiterter_euklidischer_Algorithmus</id>
	<title>Erweiterter euklidischer Algorithmus - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Erweiterter_euklidischer_Algorithmus"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Erweiterter_euklidischer_Algorithmus&amp;action=history"/>
	<updated>2026-06-04T21:17:14Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Erweiterter_euklidischer_Algorithmus&amp;diff=56327&amp;oldid=prev</id>
		<title>imported&gt;Rigormath: /* Funktionsweise der iterativen Variante */ Link zu Divison mit Rest.</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Erweiterter_euklidischer_Algorithmus&amp;diff=56327&amp;oldid=prev"/>
		<updated>2026-04-18T15:46:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Funktionsweise der iterativen Variante: &lt;/span&gt; Link zu Divison mit Rest.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der &amp;#039;&amp;#039;&amp;#039;erweiterte euklidische Algorithmus&amp;#039;&amp;#039;&amp;#039; ist ein [[Algorithmus]] aus dem [[Teilgebiete der Mathematik|mathematischen Teilgebiet]] der [[Zahlentheorie]]. Er berechnet neben dem [[größter gemeinsamer Teiler|größten gemeinsamen Teiler]] &amp;lt;math&amp;gt;\operatorname{ggT}(a,b)&amp;lt;/math&amp;gt; zweier [[Natürliche Zahl|natürlicher Zahlen]] &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; noch zwei [[ganze Zahlen]] &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, die die folgende Gleichung erfüllen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\operatorname{ggT}(a,b) = s \cdot a + t \cdot b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus ist eine Erweiterung des bereits in der [[Antike]] bekannten [[Euklidischer Algorithmus|euklidischen Algorithmus]], der nur den größten gemeinsamen Teiler berechnet.&lt;br /&gt;
&lt;br /&gt;
Das Haupteinsatzgebiet des erweiterten euklidischen Algorithmus ist die [[Restklassenring#Invertierbarkeit und Inversenberechnung|Berechnung der inversen Elemente]] in [[Prime Restklassengruppe|ganzzahligen Restklassenringen]], denn wenn der Algorithmus das Tripel &amp;lt;math&amp;gt;(d=\operatorname{ggT}(a,b), s, t)&amp;lt;/math&amp;gt; ermittelt, ist entweder &amp;lt;math&amp;gt;d=1&amp;lt;/math&amp;gt; und damit &amp;lt;math&amp;gt;1\equiv t\cdot b \pmod a&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; also das multiplikative Inverse von &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; modulo &amp;lt;math&amp;gt;a,&amp;lt;/math&amp;gt; oder aber &amp;lt;math&amp;gt;d\neq 1,&amp;lt;/math&amp;gt; was bedeutet, dass &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; modulo &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; kein Inverses hat.&lt;br /&gt;
Dies ist die Grundlage für die Lösung von [[Lineare Diophantische Gleichung|diophantischen Gleichungen]] oder allgemeiner von ganzzahligen [[Lineares Gleichungssystem|linearen Gleichungssystemen]]. Ebenso ist die Bestimmung inverser Elemente eine Grundlage für den [[Chinesischer Restsatz|chinesischen Restsatz]], welcher wiederum Grundlage des bedeutenden Tricks der kleinen Primzahlen in der berechenbaren Algebra ist. Dabei wird eine Aufgabe in mehreren [[Endlicher Körper|endlichen Körpern]] gelöst und diese Teillösungen in immer größere Restklassenringe gehoben, bis sich eine ganzzahlige Lösung ablesen lässt. Der Algorithmus liefert zudem einen [[Konstruktiver Beweis|konstruktiven Beweis]] für das [[Lemma von Bézout]], also &amp;lt;math&amp;gt;1 = s \cdot a + t \cdot b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die am weitesten bekannte Version des euklidischen Algorithmus bezieht sich auf den Bereich der ganzen Zahlen. Jedoch kann er auf jeden [[Ring (Algebra)|Ring]] angewandt werden, in welchem eine Division mit kleinstem Rest durchgeführt werden kann. Solche Ringe werden [[Euklidischer Ring|euklidisch]] genannt, ein Beispiel ist der [[Polynomring]] in einer Variablen mit rationalen oder reellen Koeffizienten. In diesem kann immer ein eindeutig bestimmter Rest mit kleinstem Grad gefunden werden.&lt;br /&gt;
&lt;br /&gt;
== Funktionsweise der iterativen Variante ==&lt;br /&gt;
&lt;br /&gt;
Die iterative Variante des EEA berechnet aus den vorgegebenen &amp;lt;math&amp;gt;a,b&amp;lt;/math&amp;gt; drei Zahlenfolgen &amp;lt;math&amp;gt;r_i, s_i, t_i&amp;lt;/math&amp;gt;. Diese werden zunächst initialisiert:&lt;br /&gt;
:&amp;lt;math&amp;gt;r_0 = a,\quad r_1 = b&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;s_0 = 1,\quad s_1 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;t_0 = 0,\quad t_1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
Dann wird für &amp;lt;math&amp;gt;i = 1,2,\ldots&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
:&amp;lt;math&amp;gt;r_{i+1} = r_{i-1} - q_i \cdot r_i&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;s_{i+1} = s_{i-1} - q_i \cdot s_i&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;t_{i+1} = t_{i-1} - q_i \cdot t_i&amp;lt;/math&amp;gt;&lt;br /&gt;
Dabei ist &amp;lt;math&amp;gt;q_i&amp;lt;/math&amp;gt; der Quotient (und &amp;lt;math&amp;gt;r_{i+1}&amp;lt;/math&amp;gt; der Rest) der [[Division mit Rest|Division]] &amp;lt;math&amp;gt;r_{i-1} : r_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die Berechnung endet, sobald &amp;lt;math&amp;gt;r_{i+1} = 0&amp;lt;/math&amp;gt; auftritt. Dann ist &amp;lt;math&amp;gt;r_i&amp;lt;/math&amp;gt; der ggT, und es gilt &amp;lt;math&amp;gt;r_i = a\cdot s_i + b \cdot t_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel dazu, aber in kompakter Form, findet man auf der Seite Division mit Rest im [[Division mit Rest#Euklidischer Algorithmus|Abschnitt Euklidischer Algorithmus]].&lt;br /&gt;
&lt;br /&gt;
== Beispiel für die rekursive Variante ==&lt;br /&gt;
&lt;br /&gt;
Zu der Vorgabe der Zahlen 99 und 78 produziert der einfache euklidische Algorithmus die Folge von Divisionen mit Rest:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{matrix}&lt;br /&gt;
\underline{99}&amp;amp;=&amp;amp;1\cdot \underline{78}+\underline{21}\\&lt;br /&gt;
\underline{78}&amp;amp;=&amp;amp;3\cdot \underline{21}+\underline{15}\\&lt;br /&gt;
\underline{21}&amp;amp;=&amp;amp;1\cdot \underline{15}+\underline{\ 6}\\&lt;br /&gt;
\underline{15}&amp;amp;=&amp;amp;2\cdot \underline{\ 6}+\underline{\ 3}\\&lt;br /&gt;
\underline{6}&amp;amp;=&amp;amp;2\cdot \underline{\ 3}+\underline{\ 0}&lt;br /&gt;
\end{matrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3 ist ein Teiler von 6 und damit der gesuchte größte gemeinsame Teiler von 99 und 78. Nun kann man diese Gleichungen rückwärts lesen und den Rest jeweils als Differenz der beiden anderen Terme darstellen. Setzt man diese Restdarstellungen rekursiv ineinander ein, so ergeben sich verschiedene Darstellungen des letzten Restes 3:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{array}{rclcl}&lt;br /&gt;
\underline{\ 3}&amp;amp;=&amp;amp;\underline{15}-2\cdot \underline{\ 6}\\&lt;br /&gt;
&amp;amp;=&amp;amp;\underline{15}-2\cdot (\underline{21}-1\cdot \underline{15})&amp;amp;=&amp;amp;3\cdot\underline{15}-2\cdot \underline{21}\\&lt;br /&gt;
&amp;amp;=&amp;amp;3\cdot(\underline{78}-3\cdot \underline{21})-2\cdot \underline{21}&amp;amp;=&amp;amp;3\cdot\underline{78}-11\cdot \underline{21}\\&lt;br /&gt;
&amp;amp;=&amp;amp;3\cdot\underline{78}-11\cdot (\underline{99}-1\cdot \underline{78})&amp;amp;=&amp;amp;14\cdot \underline{78}-11\cdot \underline{99}&lt;br /&gt;
\end{array}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der größte gemeinsame Teiler ist so als ganzzahlige [[Linearkombination]] der beiden Ausgangszahlen 78 und 99 dargestellt.&lt;br /&gt;
&lt;br /&gt;
In der eben dargestellten Berechnungsvorschrift muss man erst den letzten Schritt des einfachen euklidischen Algorithmus abwarten, bevor die Berechnung der gesuchten Koeffizienten beginnen kann. Man kann aber auch ebenso alle anderen Reste als ganzzahlige Linearkombination von 78 und 99 darstellen und die zugehörigen Koeffizienten in jedem Schritt des einfachen euklidischen Algorithmus mit bestimmen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{array}{rclcrclcl}&lt;br /&gt;
\underline{99}&amp;amp;=&amp;amp;1\cdot \underline{78}+\underline{21}&amp;amp;\iff&amp;amp;&lt;br /&gt;
  \underline{21}&amp;amp;=&amp;amp;&amp;amp;&amp;amp;1\cdot\underline{99}-1\cdot \underline{78}\\&lt;br /&gt;
\underline{78}&amp;amp;=&amp;amp;3\cdot \underline{21}+\underline{15}&amp;amp;\iff&amp;amp;&lt;br /&gt;
  \underline{15}&amp;amp;=&amp;amp;1\cdot\underline{78}-3\cdot \underline{21}&amp;amp;=&amp;amp;-3\cdot\underline{99}+4\cdot \underline{78}\\&lt;br /&gt;
\underline{21}&amp;amp;=&amp;amp;1\cdot \underline{15}+\underline{\ 6}&amp;amp;\iff&amp;amp;&lt;br /&gt;
  \underline{\ 6}&amp;amp;=&amp;amp;1\cdot\underline{21}-1\cdot\underline{15}&amp;amp;=&amp;amp;4\cdot\underline{99}-5\cdot \underline{78}\\&lt;br /&gt;
\underline{15}&amp;amp;=&amp;amp;2\cdot \underline{\ 6}+\underline{\ 3}&amp;amp;\iff&amp;amp;&lt;br /&gt;
  \underline{\ 3}&amp;amp;=&amp;amp;1\cdot\underline{15}-2\cdot \underline{\ 6}&amp;amp;=&amp;amp;-11\cdot\underline{99}+14\cdot \underline{78}&lt;br /&gt;
\end{array}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tabellarische Darstellung ==&lt;br /&gt;
=== Rekursive Variante ===&lt;br /&gt;
Die Zwischenergebnisse beider Berechnungsmöglichkeiten lassen sich übersichtlich in Tabellen darstellen. Für die erste Variante, bei der die Folge der Divisionen mit Rest rückwärts aufgearbeitet wird, kann dies die folgende Gestalt annehmen:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! a&lt;br /&gt;
! b&lt;br /&gt;
! q&lt;br /&gt;
! s&lt;br /&gt;
! t&lt;br /&gt;
|-&lt;br /&gt;
| 99 || 78 || 1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 78 || 21 || 3 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 15 || 1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 6 || 2 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 3 || 2 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0 || || ||&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! a&lt;br /&gt;
! b&lt;br /&gt;
! q&lt;br /&gt;
! s&lt;br /&gt;
! t&lt;br /&gt;
|-&lt;br /&gt;
| 99 || 78 || 1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 78 || 21 || 3 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 15 || 1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 6 || 2 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 3 || 2 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0 || || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! a&lt;br /&gt;
! b&lt;br /&gt;
! q&lt;br /&gt;
! s&lt;br /&gt;
! t&lt;br /&gt;
|-&lt;br /&gt;
| 99 || 78 || 1 || −11 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 78 || 21 || 3 || 3 || −11&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 15 || 1 || −2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 6 || 2 || 1 || −2&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 3 || 2 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0 || || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dabei wird zuerst, wie in der linken Tabelle, der einfache euklidische Algorithmus ausgeführt. Die [[Division mit Rest]] hat dabei immer die Form &amp;lt;math&amp;gt;a=q\cdot b+r&amp;lt;/math&amp;gt; (anders gesagt, bei &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; handelt es sich um das Ergebnis der Ganzzahldivision von &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; durch &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;, mit Rest &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;), wobei &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; bestimmt werden. &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; wird in der Zeile vermerkt, das Paar &amp;lt;math&amp;gt;(b,r)&amp;lt;/math&amp;gt; wird an die Stelle des Paars &amp;lt;math&amp;gt;(a,b)&amp;lt;/math&amp;gt; in der nächsten Zeile eingetragen. Dieser Schritt wird solange wiederholt, bis in der Spalte von &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; eine Null steht.&lt;br /&gt;
&lt;br /&gt;
Bis zu diesem Punkt wurde der einfache euklidische Algorithmus ausgeführt, und in der linken unteren Ecke (Spalte &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;) kann der größte gemeinsame Teiler abgelesen werden. In unserem Fall die Drei. Nun beginnt die Berechnung der ganzzahligen Koeffizienten &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;. In jeder Zeile soll dabei &amp;lt;math&amp;gt;3=s\cdot a+t\cdot b&amp;lt;/math&amp;gt; gelten. Dementsprechend wird in der letzten Zeile &amp;lt;math&amp;gt;s=1&amp;lt;/math&amp;gt; eingetragen, denn &amp;lt;math&amp;gt;3\cdot 1=3&amp;lt;/math&amp;gt;. Da in der letzten Zeile der Spalte &amp;lt;math&amp;gt;b=0&amp;lt;/math&amp;gt; steht, kann für &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; ein beliebiger Wert genommen werden, denn &amp;lt;math&amp;gt;0\cdot t=0&amp;lt;/math&amp;gt;. Hier im Beispiel ist &amp;lt;math&amp;gt;t=0&amp;lt;/math&amp;gt; gesetzt, es ergibt sich die mittlere Tabelle.&lt;br /&gt;
&lt;br /&gt;
Nun arbeitet man sich von unten nach oben. Für das &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; nimmt man das &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; der darunterliegenden Zeile. Das &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; berechnet sich aus dem &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; der jeweiligen Zeile und dem &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; der darunterliegenden Zeile.&lt;br /&gt;
: &amp;lt;math&amp;gt;s = t_{\mathsf{alt}}&amp;lt;/math&amp;gt;&lt;br /&gt;
bzw.&lt;br /&gt;
: &amp;lt;math&amp;gt;t = s_{\mathsf{alt}} - q \cdot t_{\mathsf{alt}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die vorletzte Zeile ergibt sich so &amp;lt;math&amp;gt;s = 0&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t = 1 - 2 \cdot 0 = 1&amp;lt;/math&amp;gt;, darüber dann &amp;lt;math&amp;gt;s = 1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t = 0 - 2 \cdot 1 = -2&amp;lt;/math&amp;gt; usw.&lt;br /&gt;
&lt;br /&gt;
Diesen Schritt wiederholen wir solange, bis die Tabelle ausgefüllt ist. Es ergibt sich die rechte Tabelle. Die Einträge für &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; in der ersten Zeile sind die gesuchten Werte. Der größte gemeinsame Teiler findet sich, wie schon erwähnt, in der unteren linken Ecke. Für das Beispiel gilt damit&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;3 = -11 \cdot 99 + 14 \cdot 78&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iterative Variante ===&lt;br /&gt;
Gegeben sind wieder die Werte 99 und 78:&lt;br /&gt;
&lt;br /&gt;
Wie sich aus dem Beispiel ablesen lässt, hängt der aktuelle Rechenschritt von den Zwischenergebnissen der zwei vorhergehenden Rechenschritte ab. Dem kann Rechnung getragen werden, indem bei der Initialisierung eine Hilfszeile vorangestellt wird. Weiter werden, der Übersicht halber, Hilfsvariablen &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; mit einer eigenen Spalte eingefügt.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe6&amp;quot;&lt;br /&gt;
! a&lt;br /&gt;
! b&lt;br /&gt;
! q&lt;br /&gt;
! u&lt;br /&gt;
! s&lt;br /&gt;
! v&lt;br /&gt;
! t&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 99 || 0 || 0 || 1 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 99 || 78 || 1 || 1 || 0 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 78 || 21 || 3 || 0 || 1 || 1 || −1&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 15 || 1 || 1 || −3 || −1 || 4&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 6 || 2 || −3 || 4 || 4 || −5&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 3 || 2 || 4 ||−11 || −5 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0 || ||−11 || 26 || 14 ||−33&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Um die jeweils nächste Zeile zu bestimmen, werden folgende Operationen ausgeführt:&lt;br /&gt;
&lt;br /&gt;
* Es wird die Division mit Rest ausgeführt, &amp;lt;math&amp;gt;a=q\cdot b+r&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;a_{\rm neu}=b&amp;lt;/math&amp;gt; sowie &amp;lt;math&amp;gt;b_{\rm neu}=r&amp;lt;/math&amp;gt; gesetzt.&lt;br /&gt;
* Die neuen Werte der Hilfsvariablen werden aus der aktuellen Zeile übernommen, &amp;lt;math&amp;gt;u_{\rm neu}=s&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;v_{\rm neu}=t&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Die neuen Koeffizienten ergeben sich durch &amp;lt;math&amp;gt;s_{\rm neu}=u-q\cdot s&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t_{\rm neu}=v-q\cdot t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch diese Vorschrift gelten in jeder außer der ersten Zeile die Beziehungen&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;a=u\cdot a_{\rm orig}+v\cdot b_{\rm orig}&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;b=s\cdot a_{\rm orig}+t\cdot b_{\rm orig}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
hier mit den Ausgangswerten &amp;lt;math&amp;gt;a_{\rm orig}=99&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;b_{\rm orig}=78&amp;lt;/math&amp;gt;. Aus den letzten zwei Zeilen liest man daher ab, dass &amp;#039;&amp;#039;3&amp;#039;&amp;#039; der größte gemeinsame Teiler ist und &amp;lt;math&amp;gt;3=-11\cdot 99+14\cdot 78&amp;lt;/math&amp;gt; gilt.&lt;br /&gt;
&lt;br /&gt;
Ist man mit dieser Methode vertraut genug, so kann man in der Tabelle die Spalten &amp;lt;math&amp;gt;a,u&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; weglassen, da diese nur bereits weiter oben stehende Einträge wiederholen. Weitere Beispiele in dieser verknappten Form sind in den folgenden Tabellen dargestellt:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe6&amp;quot;&lt;br /&gt;
! k.&lt;br /&gt;
! b&lt;br /&gt;
! q&lt;br /&gt;
! s&lt;br /&gt;
! t&lt;br /&gt;
|-&lt;br /&gt;
| −1. || a&amp;lt;sub&amp;gt;orig&amp;lt;/sub&amp;gt;=&amp;#039;&amp;#039;&amp;#039;122&amp;#039;&amp;#039;&amp;#039; || –|| 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0. || b&amp;lt;sub&amp;gt;orig&amp;lt;/sub&amp;gt;=&amp;#039;&amp;#039;&amp;#039;22&amp;#039;&amp;#039;&amp;#039; || 5|| 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. || 12 || 1|| 1 || −5&lt;br /&gt;
|-&lt;br /&gt;
| 2. || 10 || 1|| −1 || 6&lt;br /&gt;
|-&lt;br /&gt;
| 3. || &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039;=ggT || 5|| &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039;=s || &amp;#039;&amp;#039;&amp;#039;-11&amp;#039;&amp;#039;&amp;#039;=t&lt;br /&gt;
|-&lt;br /&gt;
| 4. || &amp;lt;s&amp;gt;0&amp;lt;/s&amp;gt; || –|| – || –&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe6&amp;quot;&lt;br /&gt;
! k.&lt;br /&gt;
! b&lt;br /&gt;
! q&lt;br /&gt;
! s&lt;br /&gt;
! t&lt;br /&gt;
|-&lt;br /&gt;
| −1. || a&amp;lt;sub&amp;gt;orig&amp;lt;/sub&amp;gt;=&amp;#039;&amp;#039;&amp;#039;120&amp;#039;&amp;#039;&amp;#039; || –|| 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0. || b&amp;lt;sub&amp;gt;orig&amp;lt;/sub&amp;gt;=&amp;#039;&amp;#039;&amp;#039;23&amp;#039;&amp;#039;&amp;#039; || 5 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. || 5 || 4|| 1 || −5&lt;br /&gt;
|-&lt;br /&gt;
| 2. || 3 || 1|| −4 || 21&lt;br /&gt;
|-&lt;br /&gt;
| 3. || 2 || 1|| 5 || −26&lt;br /&gt;
|-&lt;br /&gt;
| 4. || &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;=ggT || 2|| &amp;#039;&amp;#039;&amp;#039;-9&amp;#039;&amp;#039;&amp;#039;=s || &amp;#039;&amp;#039;&amp;#039;47&amp;#039;&amp;#039;&amp;#039;=t&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Allgemeine mathematische Grundlage ==&lt;br /&gt;
&lt;br /&gt;
Der euklidische Algorithmus erzeugt zu vorgegebenen ganzen Zahlen &amp;#039;&amp;#039;a&amp;#039;&amp;#039; und &amp;#039;&amp;#039;b&amp;#039;&amp;#039; (allgemein: Elementen eines euklidischen Rings) zwei Folgen: eine Folge &amp;lt;math&amp;gt;(q_k)_k&amp;lt;/math&amp;gt; von Quotienten und eine Folge &amp;lt;math&amp;gt;(r_k)_k&amp;lt;/math&amp;gt; von Resten, wobei &amp;lt;math&amp;gt;r_0=a,\;r_1=b&amp;lt;/math&amp;gt;. In jedem Schritt &amp;lt;math&amp;gt;k=1,2,\ldots&amp;lt;/math&amp;gt; gilt dabei&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;r_{k-1}=q_k\cdot r_k+r_{k+1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;|r_{k+1}|&amp;lt;|r_{k}|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nach endlich vielen Schritten ergibt sich der Rest Null.&lt;br /&gt;
&lt;br /&gt;
Wir gehen nun zu [[Restklasse]]n modulo &amp;#039;&amp;#039;b&amp;#039;&amp;#039; über. Es ist trivial zu sehen, dass &amp;lt;math&amp;gt;r_0=a=1\cdot a&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;r_1=b=0\cdot a+1\cdot b&amp;lt;/math&amp;gt; Vielfache von &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; nach Hinzufügen oder Abziehen von Vielfachen von &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; sind. Genauer sind die Restklassen &amp;lt;math&amp;gt;[r_k]_b&amp;lt;/math&amp;gt; Vielfache der Restklasse &amp;lt;math&amp;gt;[a]_b&amp;lt;/math&amp;gt; für &amp;lt;math&amp;gt;k=0,1&amp;lt;/math&amp;gt;, und nach Rekursionsvorschrift auch für &amp;lt;math&amp;gt;k=2,3,\ldots&amp;lt;/math&amp;gt;. Es kann also eine Folge von Multiplikatoren &amp;lt;math&amp;gt;(s_k)_k&amp;lt;/math&amp;gt; konstruiert werden, die mit &amp;lt;math&amp;gt;s_0=1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;s_1=0&amp;lt;/math&amp;gt; initialisiert ist, so dass&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;r_k\equiv s_k\cdot a\pmod b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gilt. Es ergibt sich die rekursive Beziehung&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;s_{k-1}\equiv q_k\cdot s_{k}+s_{k+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Man kann diese Rekursion in folgende Abfolge von Schritten für den erweiterten euklidischen Algorithmus fassen:&lt;br /&gt;
&lt;br /&gt;
* Erhalte &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; als Eingabe.&lt;br /&gt;
* Setze &amp;lt;math&amp;gt;k=0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;r_0=a,\;r_1=b&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;s_0=1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;s_1=0&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Wiederhole:&lt;br /&gt;
** Erhöhe &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; um eins.&lt;br /&gt;
** Bestimme den ganzzahligen Quotienten &amp;lt;math&amp;gt;q_k=r_{k-1}\;\div\;r_{k}&amp;lt;/math&amp;gt;.&lt;br /&gt;
** Setze &amp;lt;math&amp;gt;r_{k+1}=r_{k-1}-q_k\cdot r_k&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;s_{k+1}=s_{k-1}-q_k\cdot s_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
* bis &amp;lt;math&amp;gt;r_{k+1}=0&amp;lt;/math&amp;gt; gilt.&lt;br /&gt;
* Gib den Rest &amp;lt;math&amp;gt;r_k=\operatorname{ggT}(a,b)&amp;lt;/math&amp;gt; und die Zahl &amp;lt;math&amp;gt;s_k&amp;lt;/math&amp;gt; mit &amp;lt;math&amp;gt;\operatorname{ggT}(a,b)\equiv s_k\cdot a\pmod{b}&amp;lt;/math&amp;gt; zurück.&lt;br /&gt;
&lt;br /&gt;
Jeder Schritt enthält implizit auch einen Multiplikator &amp;lt;math&amp;gt;t_k=(r_k-s_k\cdot a) \div b&amp;lt;/math&amp;gt;, wobei diese Division keinen Rest lässt. Die Folge &amp;lt;math&amp;gt;(t_k)_k&amp;lt;/math&amp;gt; kann auch explizit bestimmt werden, es gelten &amp;lt;math&amp;gt;t_0=0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;t_1=1&amp;lt;/math&amp;gt; und&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;t_{k-1}\equiv q_k\cdot t_{k}+t_{k+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nach dem letzten Schritt ergibt sich nun &amp;lt;math&amp;gt;\operatorname{ggT}(a,b)=s_k\cdot a+t_k\cdot b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Übersicht halber werden beim händischen Rechnen auch noch die Hilfsfolgen &amp;lt;math&amp;gt;(a_k=r_{k-1})_k&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;(b_k=r_k)_k&amp;lt;/math&amp;gt; sowie &amp;lt;math&amp;gt;(u_k=s_{k-1})_k&amp;lt;/math&amp;gt; sowie &amp;lt;math&amp;gt;(v_k=t_{k-1})_k&amp;lt;/math&amp;gt; mitgeführt.&lt;br /&gt;
&lt;br /&gt;
== Algorithmus ==&lt;br /&gt;
=== Rekursive Variante ===&lt;br /&gt;
&lt;br /&gt;
Für den erweiterten euklidischen Algorithmus existiert auch eine [[Rekursion|rekursive]] Variante, die durch den folgenden [[Pseudocode]] gegeben ist:&amp;lt;ref name=&amp;quot;INTROALG&amp;quot;&amp;gt;{{BibISBN|0262032937}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 a,b: zwei Zahlen für die der erweiterte euklidische Algorithmus durchgeführt wird&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;#039;&amp;#039;extended_euclid&amp;#039;&amp;#039;(a,b)&lt;br /&gt;
 1  &amp;#039;&amp;#039;&amp;#039;wenn&amp;#039;&amp;#039;&amp;#039; b = 0&lt;br /&gt;
 2      &amp;#039;&amp;#039;&amp;#039;dann return&amp;#039;&amp;#039;&amp;#039; (a,1,0)&lt;br /&gt;
 3  (d&amp;#039;,s&amp;#039;,t&amp;#039;) &amp;lt;math&amp;gt;\leftarrow&amp;lt;/math&amp;gt; &amp;#039;&amp;#039;extended_euclid&amp;#039;&amp;#039;(b, a &amp;#039;&amp;#039;&amp;#039;mod&amp;#039;&amp;#039;&amp;#039; b)&lt;br /&gt;
 4  (d,s,t) &amp;lt;math&amp;gt;\leftarrow&amp;lt;/math&amp;gt; (d&amp;#039;,t&amp;#039;,s&amp;#039; – (a &amp;#039;&amp;#039;&amp;#039;div&amp;#039;&amp;#039;&amp;#039; b)t&amp;#039;)&lt;br /&gt;
 5  &amp;#039;&amp;#039;&amp;#039;return&amp;#039;&amp;#039;&amp;#039; (d,s,t)&lt;br /&gt;
&lt;br /&gt;
Gleichbedeutend ist folgende mathematische Funktionsdefinition mit Fallunterscheidung:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;\operatorname{extended\_euclid}(a,b)=&lt;br /&gt;
\begin{cases}&lt;br /&gt;
(a,1,0)&amp;amp;\text{wenn } b=0\\&lt;br /&gt;
(d&amp;#039;,t&amp;#039;,s&amp;#039;-t&amp;#039; (a \text{ div } b))&amp;amp;\text{mit }(d&amp;#039;,s&amp;#039;,t&amp;#039;)=\operatorname{extended\_euclid}(b,a\ \text{mod}\ b)&lt;br /&gt;
\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Das folgende [[Programmiersprache|Programm]] in der [[Programmiersprache]] [[C++]] zeigt die Implementierung der [[Rekursive Programmierung|rekursiven]] Variante und der [[Iterative Programmierung|iterativen]] Variante. Die zwei Varianten werden jeweils in einer [[Funktion (Programmierung)|Funktion]] mit den [[Parameter (Informatik)|Parametern]] &amp;#039;&amp;#039;a&amp;#039;&amp;#039; und &amp;#039;&amp;#039;b&amp;#039;&amp;#039; sowie &amp;#039;&amp;#039;s&amp;#039;&amp;#039; und &amp;#039;&amp;#039;t&amp;#039;&amp;#039; implementiert. Die Parameter &amp;#039;&amp;#039;s&amp;#039;&amp;#039; und &amp;#039;&amp;#039;t&amp;#039;&amp;#039; sind [[Zeiger (Informatik)|Zeiger]] auf die berechneten Zahlen. Bei der Ausführung des Programms wird die Hauptfunktion &amp;#039;&amp;#039;main&amp;#039;&amp;#039; verwendet, die die Eingabe der beiden Zahlen über die Konsole ermöglicht und dann das Ergebnis der beiden Varianten dort ausgibt.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int gcdExtendedRecursive(int a, int b, int* s, int* t)&lt;br /&gt;
{&lt;br /&gt;
    if (b == 0)&lt;br /&gt;
    {&lt;br /&gt;
        *s = 1;&lt;br /&gt;
        *t = 0;&lt;br /&gt;
        return a;&lt;br /&gt;
    }&lt;br /&gt;
    int s1, t1; // Deklaration der Variablen, die die Ergebnisse des rekursiven Aufrufs speichern&lt;br /&gt;
    int d = gcdExtendedRecursive(b, a % b, &amp;amp;s1, &amp;amp;t1); // Rekursiver Aufruf der Methode&lt;br /&gt;
    *s = t1;&lt;br /&gt;
    *t = s1 - (a / b) * t1;&lt;br /&gt;
    return d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int gcdExtendedIterative(int a, int b, int* s, int* t)&lt;br /&gt;
{&lt;br /&gt;
    *s = 1; // Initialisierung der Zeiger&lt;br /&gt;
    *t = 0;&lt;br /&gt;
    int u = 0; // Deklaration der lokalen Variablen&lt;br /&gt;
    int v = 1;&lt;br /&gt;
    while (b != 0)&lt;br /&gt;
    {&lt;br /&gt;
        int q = a / b;&lt;br /&gt;
        int b1 = b; // Variable zum Zwischenspeichern&lt;br /&gt;
        b = a - q * b;&lt;br /&gt;
        a = b1;&lt;br /&gt;
        int u1 = u; // Variable zum Zwischenspeichern&lt;br /&gt;
        u = *s - q * u;&lt;br /&gt;
        *s = u1;&lt;br /&gt;
        int v1 = v; // Variable zum Zwischenspeichern&lt;br /&gt;
        v = *t - q * v;&lt;br /&gt;
        *t = v1;&lt;br /&gt;
    }&lt;br /&gt;
    return a;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Hauptfunktion die das Programm ausführt&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    int a, b, s, t; // Deklaration der lokalen Variablen&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Erste Zahl: &amp;quot;; // Ausgabe auf der Konsole&lt;br /&gt;
    cin &amp;gt;&amp;gt; a; // Eingabe über die Konsole&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Zweite Zahl: &amp;quot;; // Ausgabe auf der Konsole&lt;br /&gt;
    cin &amp;gt;&amp;gt; b; // Eingabe über die Konsole&lt;br /&gt;
    int d = gcdExtendedRecursive(a, b, &amp;amp;s, &amp;amp;t); // Aufruf der rekursiven Funktion&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Groesster gemeinsamer Teiler: &amp;quot; &amp;lt;&amp;lt; s &amp;lt;&amp;lt; &amp;quot; * &amp;quot; &amp;lt;&amp;lt; a &amp;lt;&amp;lt; &amp;quot; + &amp;quot; &amp;lt;&amp;lt; t &amp;lt;&amp;lt; &amp;quot; * &amp;quot; &amp;lt;&amp;lt; b &amp;lt;&amp;lt; &amp;quot; = &amp;quot; &amp;lt;&amp;lt; d &amp;lt;&amp;lt; endl; // Ausgabe auf der Konsole&lt;br /&gt;
    d = gcdExtendedIterative(a, b, &amp;amp;s, &amp;amp;t); // Aufruf der iterativen Funktion&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Groesster gemeinsamer Teiler: &amp;quot; &amp;lt;&amp;lt; s &amp;lt;&amp;lt; &amp;quot; * &amp;quot; &amp;lt;&amp;lt; a &amp;lt;&amp;lt; &amp;quot; + &amp;quot; &amp;lt;&amp;lt; t &amp;lt;&amp;lt; &amp;quot; * &amp;quot; &amp;lt;&amp;lt; b &amp;lt;&amp;lt; &amp;quot; = &amp;quot; &amp;lt;&amp;lt; d &amp;lt;&amp;lt; endl; // Ausgabe auf der Konsole&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur effizienten Computerimplementierung ==&lt;br /&gt;
[[Datei:Extended-euclidean-algorithm-runtime de.svg|mini|Darstellung der Anzahl der Schleifendurchläufe für zwei Zahlen &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, für die die einfache Implementierung des erweiterten euklidischen Algorithmus verwendet wurde.]]&lt;br /&gt;
&lt;br /&gt;
=== Darstellung mittels Matrizen ===&lt;br /&gt;
&lt;br /&gt;
Versieht man die Variablen des euklidischen Algorithmus mit Indizes für den Iterationsschritt, so wird im Schritt &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; die Division mit Rest &amp;lt;math&amp;gt;m_k=n_k\cdot q_k+r_k&amp;lt;/math&amp;gt; ausgeführt. Im Übergang zum nächsten Schritt wird &amp;lt;math&amp;gt;\,m_{k+1}=n_k&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;\,n_{k+1}=r_k=m_k-q_k\cdot n_k&amp;lt;/math&amp;gt; gesetzt. Bildet man aus &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; einen [[Spaltenvektor]], so hat der gesamte Schritt eine Darstellung mit [[Matrix (Mathematik)|Übergangsmatrix]],&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
    \begin{pmatrix}m_{k+1}\\n_{k+1}\end{pmatrix}&lt;br /&gt;
  = \begin{pmatrix}0&amp;amp;1\\1&amp;amp;-q_k\end{pmatrix}&lt;br /&gt;
    \cdot \begin{pmatrix}m_{k}\\n_{k}\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Terminiert der Algorithmus nach &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; Schritten, so gilt &amp;lt;math&amp;gt;\,n_{L+1}=r_L=0&amp;lt;/math&amp;gt; und daher &amp;lt;math&amp;gt;\,m_{L+1}=n_L=\operatorname{ggT}(a,b)&amp;lt;/math&amp;gt;. Setzt man die Bildungsvorschriften der Spaltenvektoren ineinander ein, so ergibt sich die Verbindung zwischen dem ersten und dem letzten Spaltenvektor durch ein [[Matrizenprodukt]],&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;\begin{pmatrix}\operatorname{ggT}(a,b)\\0\end{pmatrix}&lt;br /&gt;
  = \begin{pmatrix}0&amp;amp;1\\1&amp;amp;-q_L\end{pmatrix}&lt;br /&gt;
    \cdot\ldots\cdot&lt;br /&gt;
    \begin{pmatrix}0&amp;amp;1\\1&amp;amp;-q_1\end{pmatrix}&lt;br /&gt;
    \cdot \begin{pmatrix}a\\b\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Durch Multiplikation mit dem Zeilenvektor &amp;lt;math&amp;gt;(1,0)&amp;lt;/math&amp;gt; wird die erste Zeile auf beiden Seiten extrahiert, somit gilt&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;\operatorname{ggT}(a,b)&lt;br /&gt;
  = \begin{pmatrix}1&amp;amp;0\end{pmatrix}&lt;br /&gt;
    \cdot&lt;br /&gt;
    \begin{pmatrix}0&amp;amp;1\\1&amp;amp;-q_{L}\end{pmatrix}&lt;br /&gt;
    \cdot\ldots\cdot&lt;br /&gt;
    \begin{pmatrix}0&amp;amp;1\\1&amp;amp;-q_1\end{pmatrix}&lt;br /&gt;
    \cdot \begin{pmatrix}a\\b\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die verschiedenen Arten, das Matrixprodukt der letzten Identität auszurechnen, ergeben die verschiedenen Varianten des erweiterten euklidischen Algorithmus. In der klassischen Variante, in welcher die Divisionen mit Rest von der letzten beginnend ausgewertet werden, entspricht der Bildung der Matrixprodukte beginnend von links. Diese entspricht dem nachfolgenden rekursiven Algorithmus. Es wird &amp;lt;math&amp;gt;(s_1,t_1)=(1,0)&amp;lt;/math&amp;gt; gesetzt und rekursiv&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;(s_{k+1},t_{k+1})=(s_k,t_k)\begin{pmatrix}0&amp;amp;1\\1&amp;amp;-q_{L+1-k}\end{pmatrix}&amp;lt;/math&amp;gt; für &amp;lt;math&amp;gt;k=1,\ldots ,L&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bestimmt. Am Ende gilt &amp;lt;math&amp;gt;\,\operatorname{ggT}(a,b)=s_{L+1}a+t_{L+1}b&amp;lt;/math&amp;gt;. Es müssen aber zuerst alle Quotienten bestimmt werden, bevor der erste Rekursionsschritt ausgeführt werden kann.&lt;br /&gt;
&lt;br /&gt;
Beginnt man die Produktbildung von rechts, so wird der Quotient der Division mit Rest in dem Augenblick benutzt, in dem er bestimmt wurde und kann danach vergessen werden. Dies entspricht dem am Anfang angegebenen Algorithmus, in welchem am Anfang&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
    \begin{pmatrix}s_1&amp;amp;t_1\\u_1&amp;amp;v_1\end{pmatrix}=I_2=\begin{pmatrix}1&amp;amp;0\\0&amp;amp;1\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt; festgesetzt und &amp;lt;math&amp;gt;&lt;br /&gt;
    \begin{pmatrix}s_{k+1}&amp;amp;t_{k+1}\\u_{k+1}&amp;amp;v_{k+1}\end{pmatrix}&lt;br /&gt;
  = \begin{pmatrix}0&amp;amp;1\\1&amp;amp;-q_k\end{pmatrix}&lt;br /&gt;
    \cdot&lt;br /&gt;
    \begin{pmatrix}s_{k}&amp;amp;t_{k}\\u_{k}&amp;amp;v_{k}\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt; für &amp;lt;math&amp;gt;k=1,\ldots ,L&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iteriert wird. Insgesamt ergibt sich damit&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
    \begin{pmatrix}s_{L+1}&amp;amp;t_{L+1}\\u_{L+1}&amp;amp;v_{L+1}\end{pmatrix}&lt;br /&gt;
  = \begin{pmatrix}0&amp;amp;1\\1&amp;amp;-q_L\end{pmatrix}&lt;br /&gt;
    \cdot\ldots\cdot&lt;br /&gt;
    \begin{pmatrix}0&amp;amp;1\\1&amp;amp;-q_1\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Am Ende gilt &amp;lt;math&amp;gt;\,\operatorname{ggT}(a,b)=s_{L+1}a+t_{L+1}b&amp;lt;/math&amp;gt;, wobei wegen der Beziehungen &amp;lt;math&amp;gt;\,s_{L+1}=u_L&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;\,t_{L+1}=v_L&amp;lt;/math&amp;gt; der letzte Iterationsschritt auch weggelassen werden kann.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Euklidischer Algorithmus]]&lt;br /&gt;
* [[Steinscher Algorithmus]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* Universität Ulm: &amp;quot;Elementare Zahlentheorie&amp;quot; [https://www.uni-ulm.de/fileadmin/website_uni_ulm/mawi.inst.zawa/lehre/11elzahl/Skript.pdf]&lt;br /&gt;
* [http://www.inf.fh-flensburg.de/lang/krypto/algo/euklid.htm Iterative Variante in Java (Quellcode)]&lt;br /&gt;
* [http://arndt-bruenner.de/mathe/scripts/erweitertereuklid.htm JavaScript-Rechner mit Berechnungsdetails und Zwischenschritten]&lt;br /&gt;
* [https://www.netzwolf.info/mathematik/erweiterter-euklidischer-algorithmus.html Alternative Darstellung der Berechnung]&lt;br /&gt;
* {{TIBAV |19885 |Linktext=Erweiterter Euklidischer Algorithmus Teil 1 |Herausgeber=PHHD |Jahr=2012 |DOI=10.5446/19885}}&lt;br /&gt;
* {{TIBAV |19886 |Linktext=Erweiterter Euklidischer Algorithmus Teil 2 |Herausgeber=PHHD |Jahr=2012 |DOI=10.5446/19886}}&lt;br /&gt;
* {{TIBAV |19887 |Linktext=Erweiterter Euklidischer Algorithmus Teil 3 |Herausgeber=PHHD |Jahr=2012 |DOI=10.5446/19887}}&lt;br /&gt;
* Hochschule Flensburg: [https://www.inf.hs-flensburg.de/lang/krypto/algo/euklid.htm Euklidischer Algorithmus]&lt;br /&gt;
* GeeksforGeeks: [https://www.geeksforgeeks.org/euclidean-algorithms-basic-and-extended/ Euclidean algorithms (Basic and Extended)]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Zahlentheoretischer Algorithmus]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Rigormath</name></author>
	</entry>
</feed>