Der Algorithmus von EUKLID berechnet den größten gemeinsamen Teiler zweier natürlicher Zahlen . Die grundlegende, iterativ angewendete Rechenoperation dabei ist modulare Division.36 Algorithmus 1 beschreibt das klassische Verfahren [Knu98, Sho05, CP05, MvV92, Ber84]. Es beginnt unter der Voraussetzung mit einer Modulo-Division . Im nächsten Schritt wird als Modul verwendet und berechnet, wonach folgt usw. . Diese (wegen ) absteigende Sequenz endet wenn wird37 – das Ergebnis befindet sich dann in .
Beweis Jeder Iterationsschritt kann in der Umkehrung (vgl. Restklassenbeziehung 3.2 in Abschnitt 3) als
geschrieben werden. So gesehen wird durch den Algorithmus der folgende Abstieg vorgenommen:
bis verschwindet.
Warum ein gemeinsamer Faktor von und ist, wird klar wenn man die Folge rückwärts betrachtet. In der letzten Zeile steht , also teilt den Rest (oder kürzer ). Wenn aber als Faktor in enthalten ist, dann kann man auf der rechten Seite der vorletzten Gleichung ausklammern, weshalb es auch als Faktor in vorkommen muß. Dies setzt sich bis in die erste Gleichung fort (sämtliche Divisionsreste enthalten folglich als Teiler), in der die Startbedingung und verankert ist. Deshalb ist der gemeinsame Teiler sowohl in als auch enthalten.
Viel kürzer kann man damit argumentieren, daß die Modulo-Division eine GCD erhaltende Operation ist. Denn mit der Zerlegung gilt ausgehend von Formel 3.2:
d. h. der gemeinsame Teiler in und ist auch in wieder enthalten.38
Damit wirklich den größten gemeinsamen Teiler stellt, muß es überhaupt alle gemeinsamen Teiler enthalten. Mit dem Ziel dies nachzuweisen betrachten wir nochmals die Folge beginnend mit der vorletzten Gleichung, welche nach umgestellt wird. Ersetzt man darin mit Hilfe der vorvorletzten Gleichung und fährt aufsteigend fort, so erhält man eine lineare Darstellung für ,
welche auf ganzen Zahlen sowie und beruht.
Mit Hilfe von Formel 4.3, welche auch Satz von BéZOUT genannt wird,39 kann jetzt relativ einfach bewiesen werden, daß wirklich der größte gemeinsame Teiler ist. Nehmen wir dazu an, es gäbe einen weiteren gemeinsamen Teiler . Dann würde dieser (auf der rechten Seite von Gleichung 4.3) als Faktor von und auszuklammern sein und deshalb (wenn man die linke Seite betrachtet) als Teiler von auftreten. Mit anderen Worten stecken alle weiteren Teiler (schon) in , weshalb nur dieser der größte gemeinsame Teiler sein kann.
Hinweis Es existieren unendlich viele lineare Darstellungen für als Linearkombination von und (vgl. auch die kurze Betrachtung zu diophantischen Gleichungen auf Seite 117). Jede Substitution der Art und , mit
erfüllt BéZOUT’s Identität 4.3 ebenso.
Die kleinsten Werte für und zeichnen sich folglich durch die Relationen und aus. Um sie zu ermitteln kann man entweder und sukzessive von und subtrahieren/addieren oder man reduziert die BéZOUT-Kofaktoren mit Hilfe von bzw. und folgender Formeln:40
Der erweiterte euklidische Algorithmus erlaubt eine effiziente Berechnung der BéZOUT-Kofaktoren und zusammen (und gleichzeitig) mit dem größten gemeinsamen Teiler (siehe auch [Knu98, Sho05, CP05, Ber84]). Dazu berücksichtigt er einige Erkenntnisse aus dem vorigen Abschnitt, insbesondere daß:
Durch Induktion ergibt sich aus
| (4.5) |
wenn man und berücksichtigt:
Vergleich mit Ausgangsformel 4.5 erlaubt die Bestimmung von und .
Mit den Startwerten und (gewährleistet ) bzw. und (ebenso für ) kann man den erweiterten euklidischen Algorithmus 2 formulieren.
Er endet ganz genauso wie Algorithmus 1 bei , ermittelt aber zusätzlich die BéZOUT-Kofaktoren und sowie die teilerfremden Anteile und . Letztere findet man wegen am Ende in und . Dies wird relativ schnell aus
ersichtlich, wenn man auf beiden Seiten der letzten Gleichung das kleinste gemeinsame Vielfache anvisiert.
Hinweis Als Ergänzung zum Hinweis von Seite 77 kann man sogar feststellen, daß die „Wahl“ von nicht unbedingt mit einer Modulo-Division verbunden sein muß. Etwas anders könnte man einfach so wählen, daß
Den steilsten Abstieg erreicht man allerdings, wenn im jeweiligen Iterationsschritt maximal ist. Dies ist aber unter der Voraussetzung genau bei einer Modulo-Division der Fall. Ansonsten ist jeder Wert geeignet — einzig die Konvergenzgeschwindigkeit nimmt mit kleineren Werten von ab.41
Für Polynome mit Koeffizienten aus kann man ganz ähnlich verfahren [HMV04, 2.3.6],[Sho05, 17.3], [CP05, 2.2.1], [Ber84, 2.1]. Mit Rückblick auf den Hinweis von Seite 83 muß man nur folgendes beachten:
Der binäre GCD-Algorithmus kommt im Gegensatz zum klassischen euklidischen Algorithmus ohne Divisionen aus [CP05, Knu98, Ste67, Wel01]. Statt dessen wird (beginnend mit und ) durch Subtraktion und Halbierung eine stetige Reduktion der Argumente und vorgenommen, welche letztlich zum größten gemeinsamen Teiler führt.42
Der Algorithmus endet spätestens dann, wenn im Schritt eines der beiden Argumente oder verschwindet (im obigen Fall beispielhaft für ). Das Reduktionsschema zeigt Tabelle 4.1.
Begründung |
|||
gerade | gemeinsamer Teiler ist 2 |
||
gerade | ungerade | 2 ist kein gemeinsamer Teiler |
|
ungerade | gerade | 2 ist kein gemeinsamer Teiler |
|
ungerade, | ,
wie
auch
,
enthalten
den
Teiler
,
denn
,
führt
zu
. |
||
ungerade, | siehe Fall |
||
ist größter gemeinsamer Teiler mit |
|||
ist größter gemeinsamer Teiler mit |
|||
Der so ermittelte größte gemeinsame Teiler muß am Schluß nur noch mit multipliziert werden (also um Bit verschoben), was auch Algorithmus 4 entsprechend wiedergibt.44 Wir können deshalb in den Betrachtungen zum erweiterten binären GCD-Algorithmus (siehe nächste Abschnitte) immer voraussetzen, daß oder ungerade ist.
Algorithmus nach KALISKI46 [Kal95] Betrachtet man das Reduktionsschema des binären GCD-Algorithmus, so kann man verschiedenste lineare Transformationen der Art
definieren, wobei sich die einzelnen Betrachtungsweisen durch unterschiedliche Werte in den Koeffizienten unterscheiden. Bei jedem Schritt sind so und als lineare Funktion von und darstellbar, die Ausgangsgrößen und deshalb als lineare Funktionen von und .
Durch Einsetzen von und in folgende Gleichung,
gefolgt von einem Koeffizientenvergleich, kann man für die konkreten Reduktionsfälle die jeweilige Transformationen der Linearfaktoren ableiten (siehe Tabelle 4.2). Am Beispiel , soll das Vorgehen exemplarisch verdeutlicht werden.
Aus den Transformationen nach Tabelle 4.2 kann man außerdem die Determinante
bestimmen.
gerade | ||||||||
gerade | ungerade | |||||||
ungerade | gerade | |||||||
ungerade, | ||||||||
ungerade, | ||||||||
Um den Zusammenhang mit den BéZOUT-Koeffizienten in herzustellen, stellen wir die Formeln 4.6 und 4.7 nach und um. Dazu werden beide Gleichungen mit den Linearfaktoren der jeweils anderen multipliziert und dann wechselweise voneinander subtrahiert.
Schließt man den Fall aus, daß und gerade sind (, vgl. Anmerkungen auf Seite 92), dann kann für den letzten Iterationsschritt , in Abhängigkeit davon ob oder zuerst verschwindet, folgendermaßen konkretisiert werden:
An diesem Punkt stellen wir jedoch fest, daß es sich bei den Größen , , und nicht um die Kofaktoren von , sondern um eine Linearfaktordarstellung von handelt.47
Um aus , und , die BéZOUT-Koeffizienten und zu bestimmen, sind zusätzliche Korrekturschritte nötig, welche in [Kal95] auch Korrekturphase (oder Phase II) genannt werden. Ziel ist es dabei, die rechte Seite der letzten Gleichung durch zu dividieren (oder in Schritten wiederholt durch 2). Da die linke Seite immer eine gerade Zahl ist, können folgende Schlußfolgerungen im Falle gezogen werden (falls war, äquivalent für und ):48
die Reduktion bzw. vornehmen, ohne daß sich die Gleichung ändert. Man wandelt jedoch die ungerade Zahl bzw. in eine gerade Zahl, die dann (wie gewünscht) durch teilbar ist. Die Ursache liegt einerseits darin begründet, daß die linke (und demzufolge auch rechte) Seite der Gleichung
immer eine gerade Zahl repräsentiert und andererseits, entweder oder/und als ungerade vorausgesetzt wurden. Berücksichtigt man die folgenden Gesetzmäßigkeiten:
dann sind genau drei Fälle konstruierbar, in denen oder ungerade ist.
In allen diesen Varianten führt aber die Addition bzw. zu einer geraden Zahl, womit sich das Korrekturverfahren bestätigt.
Als Ergebnis kann man Algorithmus 5 formulieren, wobei außerdem folgende Anmerkungen berücksichtigt wurden:
schlußfolgern, d. h. bei und handelt es sich im Fall (gleichermaßen für , im Fall ) um die teilerfremden Faktoren
Algorithmus nach PENK [Knu98, Exercise 4.5.2.39], [MvV92, 14.4.3] Dieser Algorithmus stellt und als lineare Funktion von und dar, letztlich wird also von auf geschlossen.
Vorteilhaft wirkt sich aus, daß im letzten Reduktionsschritt (wenn oder verschwindet) und bzw. und direkt die gesuchten BéZOUT-Kofaktoren , darstellen.
Durch Einsetzen von und (entsprechend Tabelle 4.1) in die Gleichungen
kann man für den jeweiligen Reduktionsfall die zugehörige Transformationen der Linearfaktoren ableiten. Wieder am Beispiel , soll das Vorgehen veranschaulicht werden ( und sind ungerade, ).
Vergleich von linker und rechter Seite läßt den Schluß zu:
Die anderen Kombinationen können genau nach demselben Schema abgeleitet werden. Tabelle 4.3 faßt die Ergebnisse in übersichtlicher Form zusammen.51
gerade | ungerade | ||||||
ungerade | gerade | ||||||
ungerade, | |||||||
ungerade, | |||||||
Dabei tritt allerdings wieder das bekannte Problem auf: Wie kann man die Ganzzahligkeit des jeweiligen Linearfaktoren bei der Halbierung wahren? Die Antwort haben wir schon beim vorangegangenen Algorithmus geliefert – indem die Ausgangsgleichungen 4.8 und 4.9 folgendermaßen erweitert:
und dadurch ungerade Zahlen , bzw. , in gerade umwandelt.
Beschränken wir uns auf die Kombinationen nach Tabelle 4.3, in denen und verändert werden (äquivalent für und ). Für den Fall, daß gerade und ungerade ist (zweite Zeile in 4.3), können wir auf die Argumentation von Seite 100 zurückgreifen (Phase II der Methode nach KALISKI). Sie erlaubt uns die Subtraktion/Addition von und für den Fall, daß oder ungerade ist. Die Situation, daß und ungerade sind (vorletzte Zeile in 4.3), kann man durch gedankliche Verzögerung der Halbierung in den nächsten Iterationsschritt erklären. Wählt man als modifizierten Einzelschritt (und entsprechend , ), so reduziert sich die Fragestellung wieder auf eine gerade Zahl , also auf den vorangegangenen Fall.
Als Ergebnis der Ausführungen kann man Algorithmus 6 formulieren. Der Vorteil des Algorithmus (gegenüber KALISKI’s) liegt vor allem darin, daß keine Korrekturphase nötig ist. Nachteilig für eine praktische Umsetzung ist die notwendige Vorzeichen-Arithmetik.