Euklidischer Algorithmus: Algorithmus in der Zahlentheorie

Der euklidische Algorithmus ist ein Algorithmus aus dem mathematischen Teilgebiet der Zahlentheorie.

Mit ihm lässt sich der größte gemeinsame Teiler zweier natürlicher Zahlen berechnen. Das Verfahren ist nach dem griechischen Mathematiker Euklid benannt, der es in seinem Werk „Die Elemente“ beschrieben hat.

Der größte gemeinsame Teiler zweier Zahlen kann auch aus ihren Primfaktorzerlegungen ermittelt werden. Ist aber von keiner der beiden Zahlen die Primfaktorzerlegung bekannt, so ist der euklidische Algorithmus das schnellste Verfahren zur Berechnung des größten gemeinsamen Teilers.

Der euklidische Algorithmus lässt sich nicht nur auf natürliche Zahlen anwenden. Vielmehr kann damit der größte gemeinsame Teiler von zwei Elementen eines jeden euklidischen Rings berechnet werden. Dazu zählen beispielsweise Polynome über einem Körper.

Der klassische Algorithmus

„Wenn CD aber AB nicht misst, und man nimmt bei AB, CD abwechselnd immer das kleinere vom größeren weg, dann muss (schließlich) eine Zahl übrig bleiben, die die vorangehende misst.“

Euklid: Die Elemente, Herausgegeben von Clemens Thaer, Wissenschaftliche Buchgesellschaft Darmstadt, VII Buch, § 2
Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 
Beispiel: ggT(44,12) = 4

Euklid berechnete den größten gemeinsamen Teiler, indem er nach einem gemeinsamen „Maß“ für die Längen zweier Linien suchte. Dazu zog er wiederholt die kleinere der beiden Längen von der größeren ab. Dabei nutzt er aus, dass sich der größte gemeinsame Teiler zweier Zahlen (oder Längen) nicht ändert, wenn man die kleinere von der größeren abzieht.

Ist die Differenz von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  sehr groß, sind unter Umständen viele Subtraktionsschritte notwendig. Hippasos von Metapont benutzte schon vor Euklid diese so genannte Wechselwegnahme geometrisch für den Beweis der Inkommensurabilität bei gewissen regelmäßigen n-Ecken: Im Quadrat oder im regelmäßigen Fünfeck etwa gibt es keinen gemeinsamen Teiler (Maß) einer Seite mit der Diagonalen.

Heutzutage wird in der Regel der weiter unten beschriebene Divisions-Algorithmus verwendet, bei dem die Schritte 2 und 3 dadurch ersetzt werden, dass man, an Stelle der Differenz von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , für Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  den Rest bei der Division von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  durch Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  nimmt. Ein weiterer Vorteil dieser Variante ist, dass man sie auf beliebige euklidische Ringe (zum Beispiel Polynomringe über einem Körper) übertragen kann, in denen der klassische Algorithmus nicht funktioniert.

Beschreibung durch Pseudocode

Der klassische Algorithmus hier in Pseudocode für nichtnegative ganze Zahlen a und b dargestellt:

EUCLID_OLD(a,b) 1  wenn a = 0 dann 2    Ergebnis = b 3  sonst 4    solange b ≠ 0 5      wenn a > b dann 6        a Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  a – b 7      sonst 8        b Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  b – a 9      // 10   // 11   Ergebnis = a 12 // 

Dieser Algorithmus kann auch in einer rekursiven Version angegeben werden:

EUCLID_OLD_RECURSIVE(a,b) 1  wenn b = 0 dann 2    Ergebnis = a 3  sonst 4    wenn a = 0 dann 5      Ergebnis = b 6    sonst 7      wenn a > b dann 8        Ergebnis = EUCLID_OLD_RECURSIVE(a – b, b) 9      sonst 10       Ergebnis = EUCLID_OLD_RECURSIVE(a, b – a) 11     // 12   // 13 // 

Moderner euklidischer Algorithmus

Heutzutage ersetzt man die im klassischen Algorithmus auftretenden wiederholten Subtraktionen eines Wertes jeweils durch eine einzige Division mit Rest. Der moderne euklidische Algorithmus führt nun in jedem Schritt solch eine Division mit Rest aus. Er beginnt mit den beiden Zahlen Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , deren größter gemeinsamer Teiler bestimmt werden soll.

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 

In jedem weiteren Schritt wird mit dem Divisor und dem Rest des vorhergehenden Schritts eine erneute Division mit Rest durchgeführt, und zwar so lange, bis eine Division aufgeht, das heißt, der Rest Null ist.

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 
    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 
      Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 
    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 

Der Divisor Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  der letzten Division ist dann der größte gemeinsame Teiler.

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 

Da sich die Zahlen in jedem zweiten Schritt mindestens halbieren, ist das Verfahren auch bei großen Zahlen extrem schnell.

Beispiel

Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 
Animation des euklidischen Algorithmus für den größten gemeinsamen Teiler
ggT(1071, 462) = 21.

Der größte gemeinsame Teiler von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  wird mit dem euklidischen Algorithmus wie folgt berechnet:

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 

Der größte gemeinsame Teiler von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  ist somit Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung .

Beschreibung durch Pseudocode

Im Folgenden wird der moderne Euklidische Algorithmus sowohl in einer rekursiven als auch einer iterativen Variante beschrieben. Dabei sind Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  jeweils die beiden Zahlen, deren größter gemeinsamer Teiler berechnet werden soll.

Rekursive Variante

EUCLID(a,b) 1  wenn b = 0 dann 2    Ergebnis = a 3  sonst 4    Ergebnis = EUCLID(b, Divisionsrest(a durch b))    // siehe Modulo-Funktion 5  // 

Iterative Variante

EUCLID(a,b) 1  solange b ≠ 0 2      h Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  Divisionsrest(a durch b)        // Siehe Modulo-Funktion 3      a Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  b 4      b Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  h 5  // 6  Ergebnis = a 

Programmierung

Das folgende Programm in der Programmiersprache C++ zeigt die Implementierung der rekursiven Variante und der iterativen Variante. Die zwei Varianten werden jeweils in einer Funktion mit den Parametern a und b implementiert. Bei der Ausführung des Programms wird die Hauptfunktion main verwendet, die die Eingabe der beiden Zahlen über die Konsole ermöglicht und dann das Ergebnis der beiden Varianten dort ausgibt.

#include  using namespace std;  int gcdRecursive(int a, int b) {     if (b == 0)     {         return a;     }     else     {         return gcdRecursive(b, a % b); // Rekursiver Aufruf der Methode     } }  int gcdIterative(int a, int b) {     if (a == 0)     {         return b;     }     while (b != 0)     {         int h = a % b;         a = b;         b = h;     }     return a; }  // Hauptfunktion die das Programm ausführt int main() {     int a, b; // Deklaration der lokalen Variablen     cout << "Erste Zahl: "; // Ausgabe auf der Konsole     cin >> a; // Eingabe über die Konsole     cout << "Zweite Zahl: "; // Ausgabe auf der Konsole     cin >> b; // Eingabe über die Konsole     cout << "Größter gemeinsamer Teiler (rekursiv): " << gcdRecursive(a, b) << endl; // Aufruf der rekursiven Funktion     cout << "Größter gemeinsamer Teiler (iterativ): " << gcdIterative(a, b) << endl; // Aufruf der íterativen Funktion } 

Korrektheit des Algorithmus

In jedem Schritt des Algorithmus wird eine Division mit Rest ausgeführt:

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung .

Die Division mit Rest hat die Eigenschaft

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung .

Im letzten Schritt des Algorithmus,

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung ,

ist Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und deshalb gilt

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung .

Da im ersten Schritt Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  ist, ist

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung .

Euklidischer Algorithmus für mehr als zwei Zahlen

Wenn der größte gemeinsame Teiler von mehr als zwei Zahlen berechnet werden soll, wird der euklidische Algorithmus schrittweise auf jeweils zwei der Zahlen angewendet. Für den größten gemeinsamen Teiler gilt das Assoziativgesetz und das Kommutativgesetz. Daher gilt für beliebige natürliche Zahlen Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 

und allgemein für beliebige natürliche Zahlen Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 

Historische Entwicklung

Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 
Darstellung Euklids von Justus von Gent (15. Jahrhundert)

Der euklidische Algorithmus ist der älteste bekannte nicht-triviale Algorithmus. Das Verfahren wurde von Euklid um 300 v. Chr. in seinem Werk Die Elemente beschrieben. In Buch VII (Propositionen 1 und 2) formulierte er den Algorithmus für positive ganze Zahlen und in Buch X (Proposition 2 und 3) für positive reelle Zahlen. Die letztere Version ist ein geometrischer Algorithmus und Euklid nannte ihn „Wechselwegnahme“ (griech. ἀνθυφαίρεσις anthyphairesis). Er suchte ein größtes gemeinsames „Maß“ zweier Strecken: eine dritte Strecke, sodass die Länge der beiden ursprünglichen Strecken Vielfache der Länge der dritten Strecke sind.

Das Verfahren wurde wahrscheinlich nicht von Euklid erfunden, da er in den Elementen die Erkenntnisse früherer Mathematiker zusammenfasste. Der Mathematiker und Historiker Bartel Leendert van der Waerden vermutet, dass Buch VII ein schon von den Pythagoreern verwendetes Lehrbuch der Zahlentheorie ist. Hippasos von Metapont führte etwa 500 v. Chr. vermutlich seinen Beweis der Inkommensurabilität von gewissen Strecken und Diagonalen auf Grundlage des euklidischen Algorithmus durch, und auch Eudoxos von Knidos (um 375 v. Chr.) kannte wohl das Verfahren. Aristoteles (um 330 v. Chr.) wies auf dieses Verfahren in seinem Werk Topik (158b, 29–35) hin.

Jahrhunderte später wurde der euklidische Algorithmus voneinander unabhängig in Indien und China entdeckt, um damit hauptsächlich diophantische Gleichungen aus der Astronomie zu lösen und genaue Kalender zu erstellen. Im fünften Jahrhundert beschrieb der indische Mathematiker und Astronom Aryabhata den Algorithmus als „Pulverisator“, wahrscheinlich aufgrund seiner Effektivität beim Lösen diophantischer Gleichungen. Zwar hat schon der chinesische Mathematiker und Astronom Sun Zi einen Spezialfall des chinesischen Restsatzes beschrieben, die allgemeine Lösung wurde jedoch von Qin Jiushao 1247 in seinem Buch Shushu Jiuzhang (chinesisch 數書九章 / 数书九章 – „Mathematische Abhandlung in neun Kapiteln“) veröffentlicht. Im neuzeitlichen Europa wurde der euklidische Algorithmus erstmals wieder in der zweiten Auflage von Bachets Problèmes plaisants et délectables, qui se font par les nombres beschrieben. Der Algorithmus wurde in Europa zum Lösen diophantischer Gleichungen und zur Berechnung der Kettenbruchentwicklung verwendet. Nicholas Saunderson veröffentlichte den erweiterten euklidischen Algorithmus und schrieb ihn Roger Cotes zu als Methode zur effizienten Berechnung von Kettenbrüchen.

Im 19. Jahrhundert gab der euklidische Algorithmus den Anstoß zur Entwicklung neuer Zahlensysteme wie den gaußschen Zahlen und den Eisenstein-Zahlen. 1815 verwendete Carl Friedrich Gauß den euklidischen Algorithmus, um die eindeutige Faktorisierung der gaußschen Zahlen zu zeigen. Seine Arbeit wurde jedoch erst im Jahr 1832 veröffentlicht. Gauß erwähnte den Algorithmus zudem in seinem 1801 veröffentlichten Werk Disquisitiones Arithmeticae, allerdings nur als Methode zur Berechnung von Kettenbrüchen. Peter Gustav Lejeune Dirichlet scheint der Erste zu sein, der den euklidischen Algorithmus als Grundlage eines großen Teils der Zahlentheorie beschrieben hat. Er bemerkte, dass viele Ergebnisse der Zahlentheorie, wie beispielsweise die eindeutige Faktorisierung, auch für andere Zahlensysteme gelten, in denen der euklidische Algorithmus angewendet werden kann. Dirichlets Vorlesungen über Zahlentheorie wurden von Richard Dedekind herausgegeben und erweitert, der den euklidischen Algorithmus für das Studium algebraischer Zahlen nutzte, einer neuen allgemeineren Zahlenart. Dedekind war beispielsweise der Erste, der Pierre de Fermats Zwei-Quadrate-Satz mit der eindeutigen Faktorisierung der gaußschen Zahlen bewies. Dedekind führte das Konzept des euklidischen Rings ein, ein Zahlensystem, in dem eine verallgemeinerte Variante des euklidischen Algorithmus angewendet werden kann. In den letzten Jahrzehnten des 19. Jahrhunderts trat der euklidische Algorithmus allmählich hinter Dedekinds allgemeinere Theorie der Ideale zurück.

Jacques Charles François Sturm entwickelte 1829 die sturmschen Ketten zur Berechnung der Anzahl der Nullstellen eines Polynoms in einem vorgegebenen Intervall. Dabei wird eine Variante des euklidischen Algorithmus verwendet, um die einzelnen Glieder einer Kette zu bestimmen.

In der Vergangenheit gab es zahllose Versuche, den euklidischen Algorithmus auf mehr als zwei natürliche Zahlen zu verallgemeinern, beispielsweise um außer ihrem größten gemeinsamen Teiler auch optimale (etwa kleinstmögliche) Multiplikatoren zu finden, die in der Linearkombination mit den Zahlen diesen Teiler liefern. Der moderne Stand der Forschung hierzu wurde von Havas, Majewski und Matthews dargestellt.

Der euklidische Algorithmus war der erste Algorithmus zur Berechnung von Ganzzahlbeziehungen kommensurabler reeller Zahlen. In den vergangenen Jahren wurden weitere Algorithmen für diese Aufgabenstellung entwickelt, beispielsweise der Ferguson–Forcade-Algorithmus aus dem Jahr 1979 und verwandte Algorithmen, der LLL-Algorithmus, der HJLS-Algorithmus (nach den Autoren Håstad, Just, Lagarias und Schnorr) und der PSLQ-Algorithmus (nach partial sum of squares plus LQ matrix decomposition). Im Jahr 2001 wurde gezeigt, dass die von einigen Autoren berichtete Instabilität des HJLS-Algorithmus lediglich auf einer unzweckmäßigen Implementierung beruhte und dass dieser Algorithmus äquivalent zum PSLQ-Algorithmus ist. Enger an den eigentlichen euklidischen Algorithmus angelehnt sind seine mehrdimensionalen Verallgemeinerungen von George Szekeres (1970), Helaman Ferguson und Rodney Forcade (1981), Just (1992), von Rössner und Schnorr (1996) sowie der sehr allgemeine Ansatz von Lagarias (1994).

1969 entwickelten Cole und Davie das Zwei-Spieler-Spiel „Euklid“, das auf dem euklidischen Algorithmus basiert. Bei diesem Spiel gibt es eine optimale Strategie. Die beiden Spieler beginnen mit zwei Stapeln von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  Steinen. In jeder Runde nimmt ein Spieler Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung -mal so viele Steine vom größeren Stapel, wie der kleinere Stapel groß ist. Auf diese Weise kann der nächste Spieler den größeren Stapel mit Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  Steinen auf Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  Steine verkleinern, wobei Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  die Größe des kleineren Stapels ist. Es gewinnt der Spieler, der einen Stapel komplett abträgt.

Laufzeitanalyse

Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 
Anzahl der Schritte zur Berechnung von ggT(x,y). Rote Punkte bedeuten wenige Schritte, gelbe, grüne und blaue Punkte relativ mehr Schritte. Die dunkelblaue Linie hat die Steigung Φ, wobei Φ der Goldene Schnitt ist.

Mit dem euklidischen Algorithmus kann man den größten gemeinsamen Teiler mit verhältnismäßig geringem Aufwand (im Vergleich zur Berechnung der Primfaktorzerlegung der Zahlen Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung ) berechnen. Bei der Laufzeitanalyse stellt sich heraus, dass der ungünstigste Fall (Worst case) für die Eingabe zwei aufeinander folgende Fibonacci-Zahlen sind. Bei aufeinander folgenden Fibonacci-Zahlen ergibt sich als Rest immer die nächstkleinere Fibonacci-Zahl. Die Anzahl der benötigten Divisionen beträgt im schlimmsten Fall Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , wobei Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  proportional zur Anzahl der Ziffern in der Eingabe ist (siehe Landau-Symbole).

Da die für die Division zweier Zahlen benötigte Zeit ihrerseits von der Anzahl der Ziffern der Zahlen abhängt, ergibt sich eine tatsächliche Laufzeit von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  bei naiver Ausführung der Division. Durch die vollständige Überführung der eigentlichen Berechnung in den Frequenzbereich mittels einer speziellen schnellen Fourier-Transformation, wie sie im Schönhage-Strassen-Algorithmus Verwendung findet, schneller Reziprokwertberechnung mit dem Newton-Verfahren (im Frequenzbereich) für die Division und anschließender Rücktransformation mittels inverser schneller Fourier-Transformation kommt man so zu einer theoretischen Untergrenze von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , wobei Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  die maximale Anzahl an Ziffern von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  ist.

Die von Schönhage entwickelte Variante des euklidischen Algorithmus konnte durch Parallelisierung auf einem Multiprozessorsystem weiter beschleunigt werden.

Für die Anzahl der Schritte gibt es asymptotische Abschätzungen, wobei die Porter-Konstante eine Rolle spielt.

Wenn Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  gilt und der euklidische Algorithmus Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  Schritte braucht, gilt Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  mit den Fibonacci-Zahlen Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung . Für die Fibonacci-Zahl Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und die Goldene Zahl Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  gilt die Ungleichung Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung . Daraus folgt, dass der euklidische Algorithmus nach höchstens

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 

Iterationsschritten beendet ist.

Nach dem Satz von Lamé gilt außerdem: Die Anzahl der Iterationsschritte des euklidische Algorithmus ist kleiner als das 5-fache der Anzahl der Dezimalstellen des Minimums von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung .

Euklidischer Algorithmus und Kettenbruchzerlegung

Die Quotienten, die im euklidischen Algorithmus auftreten, sind genau die Teilnenner, die in der Kettenbruchzerlegung von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  vorkommen. Hier für das obige Beispiel mit hervorgehobenen Ziffern:t

1071 = 1 × 1029 + 42
1029 = 24 × 42 + 21
42 = 2 × 21 + 0

Hieraus lässt sich der Kettenbruch entwickeln:

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung .

Dieses Verfahren lässt sich auch für jede beliebige reelle Zahl Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  anwenden. Ist Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  nicht rational, so endet der Algorithmus einfach nie. Die so gewonnene Folge an Quotienten stellt dann die unendliche Kettenbruchzerlegung von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  dar.

Andere Zahlenmengen und algebraische Strukturen

Wie oben beschrieben wird der euklidische Algorithmus zur Berechnung des größten gemeinsamen Teilers zweier natürlicher Zahlen verwendet. Der Algorithmus lässt sich jedoch auch auf reelle Zahlen und exotischere algebraische Strukturen wie Polynome, quadratische Zahlen, Gaußsche Zahlen, Eisenstein-Zahlen und die nicht-kommutativen Hurwitzquaternionen verallgemeinern. Im letzten Fall wird der euklidische Algorithmus dazu verwendet, die wichtige Eigenschaft einer eindeutigen Faktorisierung zu zeigen. Das heißt, dass eine solche Zahl eindeutig in irreduzible Elemente, der Verallgemeinerung von Primzahlen, zerlegt werden kann. Die eindeutige Faktorisierung ist grundlegend für viele Beweise der Zahlentheorie.

Rationale und reelle Zahlen

Wie schon von Euklid im Buch 10 seines Werks „Die Elemente“ beschrieben, kann der euklidische Algorithmus auch auf reelle Zahlen angewandt werden. Das Ziel des Algorithmus ist es dann, eine reelle Zahl Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  zu finden, sodass die beiden Zahlen Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  ganzzahlige Vielfache dieser Zahl sind. Diese Aufgabenstellung ist gleichbedeutend mit der Suche nach einer Ganzzahlbeziehung zwischen den beiden reellen Zahlen Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , also der Berechnung zweier ganzer Zahlen Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , für die Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  gilt. Euklid verwendete diesen Algorithmus bei der Betrachtung der Inkommensurabilität von Strecken.

Der euklidische Algorithmus für reelle Zahlen unterscheidet sich in zwei Punkten von seinem Gegenstück für ganze Zahlen. Zum einen ist der Rest Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  eine reelle Zahl, obwohl die Quotienten Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  weiterhin ganze Zahlen sind. Zum anderen endet der Algorithmus nicht immer nach einer endlichen Anzahl von Schritten. Wenn er dies jedoch tut, dann ist der Bruch Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  eine rationale Zahl; es gibt also zwei ganze Zahlen Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  mit

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 

und kann als Kettenbruch Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  geschrieben werden. Wenn der Algorithmus nicht endet, dann ist der Bruch Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  eine irrationale Zahl und mit dem unendlichen Kettenbruch Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  identisch. Beispiele für unendliche Kettenbrüche sind die Goldene Zahl Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und die Wurzel aus 2 Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung . Im Allgemeinen ist es unwahrscheinlich, dass der Algorithmus anhält, da fast alle Verhältnisse Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  zweier reeller Zahlen irrationale Zahlen sind.

Polynome

Polynome in einer Variablen über einem Körper bilden einen euklidischen Ring. Die Polynomdivision ist für diese Polynome also eine Division mit Rest und der euklidische Algorithmus kann genauso wie bei den ganzen Zahlen durchgeführt werden. Die Berechnung des größten gemeinsamen Teilers der Polynome Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  in Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  gestaltet sich beispielsweise folgendermaßen:

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 
    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 

Damit ist Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  (oder das dazu assoziierte Polynom Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung ) ein größter gemeinsamer Teiler von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung .

Polynome mit Koeffizienten aus einem faktoriellen Ring

Wir halten einen faktoriellen Ring (d. h. einen Ring mit bis auf Einheiten eindeutiger Primfaktorzerlegung) Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  fest und betrachten Polynome aus dem Polynomring Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , also Polynome in einer Variablen Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  mit Koeffizienten aus Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung . Im Spezialfall Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , wobei Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  ein Körper sei, erhalten wir so den Ring Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  der Polynome in zwei Variablen über Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung .

In Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  ist Division mit Rest nicht mehr allgemein durchführbar. Seien z. B. Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  in Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung . Polynomdivision in Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  liefert den Quotienten Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , der nicht in Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  liegt. Wir können allerdings eine Pseudodivision wie folgt definieren: Seien Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  Polynome aus Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  mit Grad Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  bzw. Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , sei Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  der Leitkoeffizient des Polynoms Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung . Dann gibt es Polynome Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , so dass

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 

wobei wieder Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  von geringerem Grad ist als Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung . Durch wiederholte Durchführung der Pseudodivision lässt sich der ggT von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  bestimmen, allerdings ist das Verfahren in der Praxis ineffizient, da die Faktoren Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  die Koeffizienten der Zwischenergebnisse exponentiell anwachsen lassen. Um das zu vermeiden kann nach jedem Schritt der Inhalt des Rests Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  entfernt werden, was allerdings wiederum ggT-Berechnungen in Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  erfordert. Effizienter lässt sich der ggT mit dem Subresultantenverfahren berechnen.

Gaußsche Zahlen

Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 
Verteilung der gaußschen Primzahlen in der komplexen Zahlenebene

Eine gaußsche Zahl Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  ist durch Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  gegeben, wobei Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  ganze Zahlen sind.

Sind Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  gaußsche Zahlen, die beide nicht 0 sind. Der größte gemeinsame Teiler von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  ist die gaußsche Zahl mit der größten Norm, die sowohl ein Teiler von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  als auch von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  ist.

Beispiel

Gesucht ist der größte gemeinsame Teiler von Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung . In jedem Schritt wird mit dem Divisor und dem Rest des vorhergehenden Schritts eine erneute Division mit Rest durchgeführt, und zwar so lange, bis der Rest gleich 0 ist.

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 

Der letzte Rest ungleich 0 ist Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , so dass Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  nur Einheiten als gemeinsamen Teiler haben. Sie sind also teilerfremd. Im Gegensatz zu den ganzen Zahlen muss bei zwei gaußschen Zahlen, die teilerfremd sind, nicht unbedingt 1 der letzte Rest ungleich 0 sein. Es kann stattdessen eine der vier Einheiten Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung , Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  sein.

Varianten

Von Josef Stein stammt der nach ihm benannte steinsche Algorithmus, der ohne die aufwändigen Divisionen auskommt. Er verwendet nur noch Divisionen durch Zwei, die von einem Rechner sehr schnell durchzuführen sind. Aus diesem Grund wird dieser Algorithmus auch binärer euklidischer Algorithmus genannt. Der Performancevorteil auf realen Rechnern zeigt sich aber nur, wenn der Integertyp die Registerbreite des Prozessors nicht überschreitet.

Merkt man sich beim euklidischen Algorithmus die Quotienten Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  der Zwischenschritte, dann lässt sich damit eine Darstellung

    Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung 

mit ganzen Zahlen Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  und Euklidischer Algorithmus: Der klassische Algorithmus, Moderner euklidischer Algorithmus, Historische Entwicklung  finden. Dies nennt man den erweiterten euklidischen Algorithmus. Damit lassen sich die Inversen in Restklassenringen berechnen.

Eine andere Erweiterung ist der Algorithmus, der hinter dem Quadratischen Reziprozitätsgesetz steckt. Mit diesem lässt sich das Jacobi-Symbol effizient berechnen.

Siehe auch

Einzelnachweise

Tags:

Euklidischer Algorithmus Der klassische AlgorithmusEuklidischer Algorithmus Moderner euklidischer AlgorithmusEuklidischer Algorithmus Historische EntwicklungEuklidischer Algorithmus LaufzeitanalyseEuklidischer Algorithmus und KettenbruchzerlegungEuklidischer Algorithmus Andere Zahlenmengen und algebraische StrukturenEuklidischer Algorithmus VariantenEuklidischer Algorithmus Siehe auchEuklidischer Algorithmus WeblinksEuklidischer Algorithmus EinzelnachweiseEuklidischer AlgorithmusAlgorithmusElemente (Euklid)EuklidGrößter gemeinsamer TeilerNatürliche ZahlTeilgebiete der MathematikZahlentheorie

🔥 Trending searches on Wiki Deutsch:

Bushido (Rapper)WeltkarteCharles MansonBMW 3erBrandenburgAfghanistanTuberkuloseBMW E90Romeo (Soziales Netzwerk)IndienHeiko MaasSheryl CrowWeltwunderWestdeutscher Rundfunk KölnDreikörperproblemDienstgrade der Streitkräfte der Vereinigten StaatenNapoleon BonaparteSingapurInterstellarDie Herrlichkeit des Lebens (Film)Marvel Cinematic UniverseFrankfurt am MainNicholas OfczarekPeaky Blinders – Gangs of BirminghamOsmanisches ReichAnya Taylor-JoyFiguren aus dem Marvel-UniversumPräsidentschaftswahl in Senegal 2024Österreich-UngarnJana AziziHans-Ulrich HolthermCOVID-19-PandemieFreddie MercuryKubaElton (Moderator)Christina ApplegateNew York CitySarah ConnorKristen StewartAC/DCCollien Ulmen-FernandesFußball-Europameisterschaft 2016Eurovision Song Contest 2024Auferstehung Jesu ChristiListe der Staaten EuropasTanja GönnerFußball-Weltmeisterschaft 2026/QualifikationRudolf HößMillie Bobby BrownAsbestHamburgValli KafkaJakob LundtHeath LedgerItalienJustin HenrySarah EngelsCéline DionPoor ThingsMalaysia-Airlines-Flug 370Alice WeidelDänemarkKasselMilena JesenskáPragScharbockskrautKölner DomTony ShalhoubShameless (US-amerikanische Fernsehserie)IOS (Betriebssystem)Das Signal (Fernsehserie)ParisTechnisches Rathaus (Frankfurt am Main)Road House (2024)AustralienKZ AuschwitzJulia Hartmann (Schauspielerin)Baden-Württemberg🡆 More