Euklidischer Algorithmus und Laufzeit

Beginner Algorithmen und Datenstrukturen Deutsch
Also available: English
Created by Best · 16.08.2026 at 09:13 UTC

Der euklidische Algorithmus berechnet den grössten gemeinsamen Teiler ggT(a, b). Die modulo-Variante ersetzt das Paar (a, b) durch (b, a mod b), bis der Rest 0 ist. Dann ist der aktuelle Wert von b der ggT.

Beispiel: ggT(92, 32): 92 = 2*32 + 28, weiter mit (32, 28), (28, 4), (4, 0). Ergebnis 4.

Für aufeinanderfolgende Fibonacci-Zahlen ist die modulo-Variante deutlich sparsamer als wiederholtes Subtrahieren: die Schrittzahl wächst mit der Grösse der Zahlen nur langsam (logarithmisch). Die Subtraktionsvariante kann linear viele Schritte brauchen.

Der Algorithmus ist determiniert: gleiche Eingaben liefern denselben ggT.

Diagram

$$\gcd(a,b)=\gcd(b,a \bmod b)$$

Wo gebraucht

Baustein in Kryptografie (modulare Inverse, RSA-Vorbereitung), Bruchkürzen, Takt-/Sample-Raten angleichen, Gitter- und Zahlentheorie-Code. Die logarithmische Schrittzahl ist der Grund, warum GCD auch bei grossen Integers alltagstauglich bleibt.

Vertiefung

Der Algorithmus beruht auf der Invariante ggT(a, b) = ggT(b, a mod b). Jeder Schritt ersetzt das Paar durch ein kleineres äquivalentes Problem. Sobald der zweite Wert null ist, enthält der erste den gesuchten Teiler.

Der Rest kann im ungünstigen Fall nur langsam schrumpfen. Die langsamsten Folgen stehen eng mit aufeinanderfolgenden Fibonacci-Zahlen in Verbindung. Trotzdem wächst die Schrittzahl nur proportional zur Stellenzahl der Eingabe und nicht proportional zu ihrem Zahlenwert.

Die iterative Form benötigt konstanten Zusatzspeicher. Die rekursive Form bildet dieselbe Zustandsfolge im Aufrufspeicher ab und ist mathematisch knapp, bringt in Java aber keinen automatischen Speichergewinn.

Schwierigkeitsstufen

  1. Restschritte für zwei positive Zahlen ausführen.
  2. Die ggT-Invariante mit der Division mit Rest begründen.
  3. Den Fibonacci-Zusammenhang für ungünstige Eingaben erklären.

Fallstricke

Ein häufiger Fehler ist die Verwechslung von Quotient und Rest. Für negative Eingaben oder a = b = 0 muss ausserdem festgelegt werden, welche Vorbedingungen und Vorzeichenkonventionen gelten.

University approvals: 0
Tasks
Question 1

Was ist ggT(48, 18) nach dem modulo-Euklid?

Question 2

Welche Aussage zur Laufzeit der modulo-Variante ist für Fibonacci-Paare treffend?

Question 3

Warum dürfen a und b durch b und a % b ersetzt werden?

Question 4

Implementiere den modulo-euklidischen Algorithmus für zwei ganze Zahlen.

Hint

Java stellt den Restoperator % für Ganzzahlen bereit. Math.abs(int) normalisiert bei Bedarf das Vorzeichen.

Starter code is prefilled; replace TODO blocks with your solution.
1 test case will be used for grading
Run checks runtime behavior only. Final correctness is evaluated when you submit.
Card Info
  • Topic: Algorithmen und Datenstrukturen
  • Difficulty: Beginner
  • Completed: 0 users
Creator
Best
Best
BestBuddy