GCD / LCM Calculator
Find the greatest common divisor and least common multiple of two numbers.
Geprüft von Aygul Dovletova · Zuletzt geprüft
Den ggT- und kgV-Rechner verwenden
- Die Felder Erste Zahl und Zweite Zahl mit den ganzen Zahlen füllen, von denen du ggT und kgV möchtest. Negative Vorzeichen und null sind beide erlaubt; das Werkzeug normalisiert auf absolute Werte vor dem Berechnen.
- Berechnen drücken oder Enter drücken. ggT und kgV erscheinen nebeneinander, zusammen mit der Identität
|a × b| = ggT(a, b) × kgV(a, b), mit deinen Zahlen ausgefüllt, damit du die Beziehung sehen kannst. - Das Schritt-Protokoll lesen unterhalb des Ergebnisses. Jede Division in Euklids Algorithmus wird als
a = bq + rgezeigt, was den Prozess für Hausaufgaben oder Unterricht inspizierbar macht. - Erneut ausführen mit verschiedenen Eingaben so oft du möchtest; nichts wird zwischen Berechnungen gespeichert.
- Jede Zeile des Schritt-Protokolls kopieren mit einem Klick, praktisch beim Einfügen der Ableitung in ein LaTeX-Dokument oder eine Chat-Nachricht.
Der Euklidische Algorithmus in Code
Die ggT-Routine implementiert Euklids Algorithmus mit der Rest-Variante: Während der zweite Operand nicht null ist, ersetze (a, b) durch (b, a mod b); der finale Wert von a ist der ggT. JavaScripts %-Operator gibt einen Wert mit dem Vorzeichen des Dividenden zurück, also hält die Absolutwert-Normalisierung am Anfang der Funktion die Schleifeninvariante sauber. Das kgV wird dann als |a * b| / ggT berechnet, wobei die Division vor der Multiplikation durchgeführt wird, wo möglich, um Zwischenüberlauf zu vermeiden, d.h. (a / ggT) * b.
Beide Routinen laufen im Browser ohne Netzwerkaufruf. Das Schritt-Protokoll wird während der Iteration erstellt, indem jedes { a, b, q, r }-Tupel in ein Array geschoben wird, das dann als Liste gerendert wird. Die Gesamtkosten sind O(log min(a, b)) Divisionen, der schlimmste Fall ist ein Paar aufeinanderfolgender Fibonacci-Zahlen - ein Ergebnis, das Gabriel Lamé 1844 bewies und das als erste Komplexitätsanalyse in der Geschichte des Gebietes gilt.
Wo ggT und kgV in echter Arbeit auftauchen
- Einen Bruch auf niedrigste Terme kürzen, indem Zähler und Nenner durch ihren ggT dividiert werden.
- Einen gemeinsamen Nenner für die Bruchaddition finden, was einfach das kgV der beiden Nenner ist.
- Die Periode zweier wiederkehrender Ereignisse berechnen - ein Bus alle 12 Minuten und ein anderer alle 18 Minuten treffen sich wieder nach kgV(12, 18) = 36 Minuten.
- Teilerfremdheit prüfen (ggT = 1) vor der Anwendung des Chinesischen Restsatzes oder der Wahl eines RSA-Exponenten.
- Ein Zahnrad-Verhältnis, ein Riemen-Verhältnis oder ein Musiktheorie-Intervall auf seine kanonische Form reduzieren.
- Herausfinden, wie viele Fliesen der Größe a mal b in ein größeres Rechteck passen, ohne zu schneiden - ein ggT-Problem.
Grenzfälle
- ggT(a, 0) = |a| für jede ganze Zahl a, weil jede ganze Zahl null teilt. Das Werkzeug gibt |a| sauber zurück statt in eine Endlosschleife zu geraten.
- ggT(0, 0) ist konventionell als 0 definiert, da keine positive ganze Zahl als "größte" bezeichnet werden kann. Das Werkzeug folgt dieser Konvention.
- kgV mit einem Null-Operanden ist 0, entsprechend der Konvention, dass jede nicht-nullige Zahl 0 teilt, also ist das "kleinste gemeinsame Vielfache", das ein Vielfaches von 0 ist, einfach 0.
- Negative Eingaben werden durch das Vorneweg-Nehmen absoluter Werte behandelt. ggT und kgV sind konventionell nicht-negativ in den ganzen Zahlen.
- Sehr große Eingaben bis zu
Number.MAX_SAFE_INTEGER(253-1) funktionieren genau. Für größere Größenordnungen auf BigInt oder ein CAS umsteigen. - Teilerfremde Paare ergeben ggT = 1 und kgV = |a * b|, was das maximale mögliche kgV für ein gegebenes Produkt ist; das ist ein kleiner aber nützlicher Plausibilitätscheck.
Hintergrund: Zweitausend Jahre desselben Algorithmus
Euklid formulierte den Algorithmus in Proposition VII.1 der Elemente (ca. 300 v. Chr.) unter Verwendung von Subtraktion statt der Modulus-Operation: Wiederholt ersetze das Größere von (a, b) durch die Differenz mit dem Kleineren, bis sie gleich sind. Die hier verwendete Modulus-basierte Variante ist für Operanden sehr unterschiedlicher Größe schneller, mathematisch aber identisch. Lamés Theorem von 1844 begrenzt die Anzahl der Iterationen auf das Fünffache der Anzahl der Dezimalstellen des kleineren Operanden, weshalb selbst zehnstellige Eingaben weniger als 50 Schritte benötigen. Der erweiterte Euklidische Algorithmus geht weiter und gibt auch ganze Zahlen x, y zurück, sodass a·x + b·y = ggT(a, b); diese Bezout-Koeffizientenform ermöglicht modulare Inverse und RSA-Schlüsselgenerierung. Dieses Werkzeug gibt nur ggT und kgV zurück, nicht die Bezout-Koeffizienten.
Alternativen und Kompromisse
Pythons math.gcd und math.lcm, JavaScripts eigene BigInt-basierte Lösungen und Befehlszeilenwerkzeuge wie bc oder factor berechnen ggT und kgV alle schneller für geskriptete Verwendung. Für gigantische Operanden mit Hunderten von Stellen ist das binäre ggT (Steins Algorithmus) kennenswert, weil er Divisionen zugunsten von Bit-Shifts und Subtraktionen vermeidet - historisch nützlich auf Hardware mit langsamer Division. Für symbolische oder Polynom-ggTs (nützlich in der Computeralgebra) brauchst du SymPy, Mathematica oder Maxima. Das Browser-Werkzeug gewinnt, wenn du zwei überschaubare Integer hast und die Antwort plus die Ableitung ohne Öffnen eines REPLs möchtest. Zeige-deine-Arbeit-Transkripte sind sein unterscheidendes Merkmal.
Häufig gestellte Fragen
Warum wird ggT(0, 0) als null behandelt?
Null ist durch jede ganze Zahl teilbar, also hat "größter gemeinsamer Teiler" von null und null kein größtes Element in den positiven ganzen Zahlen. Die moderne algebraische Konvention, die hier befolgt wird, ist ggT(0, 0) = 0 zu setzen und es als Identität für die ggT-Operation unter dem Teilbarkeitsverband zu behandeln. Einige ältere Quellen lassen es undefiniert, aber das würde einen Laufzeitfehler für eine vollkommen sinnvolle algebraische Eingabe erfordern.
Wie schnell läuft der Algorithmus?
Der Euklidische Algorithmus führt <em>O</em>(log min(a, b)) Modulusoperationen durch. Gabriel Lamé bewies 1844, dass der schlimmste Fall ein Paar aufeinanderfolgender Fibonacci-Zahlen ist, und die Schrittanzahl ist durch etwa das Fünffache der Anzahl der Dezimalstellen des kleineren Operanden begrenzt. Selbst bei beiden Eingaben bei <code>Number.MAX_SAFE_INTEGER</code> wird die Berechnung in Mikrosekunden abgeschlossen, sodass die einzige wahrnehmbare Verzögerung das Rendern des Schritt-Protokolls ist.
Wird die Berechnung auf einem Server durchgeführt?
Nein. Die Preact-Komponente enthält den gesamten Algorithmus; es gibt keinen fetch-Aufruf, kein WebSocket und keinen Backend-Dienst. Deine Zahlen werden niemals übertragen. Wenn du DevTools öffnest und den Netzwerk-Tab während einer Berechnung beobachtest, siehst du null ausgehende Anfragen.
Warum ist ggT(a, b) * kgV(a, b) gleich |a * b|?
Schreibe <em>a</em> und <em>b</em> als Primfaktorzerlegungen: <em>a</em> = ∏ <em>p</em><sub>i</sub><sup>α<sub>i</sub></sup>, <em>b</em> = ∏ <em>p</em><sub>i</sub><sup>β<sub>i</sub></sup>. Der ggT nimmt den Minimum-Exponenten bei jeder Primzahl, das kgV den Maximum. Min und Max addieren ergibt die Summe der beiden Exponenten, sodass ggT mit kgV multipliziert <em>a</em>·<em>b</em> rekonstruiert. Diese Identität ermöglicht dem Werkzeug, kgV aus ggT in konstanter Zeit zu berechnen, statt einen zweiten Durchgang zu machen.
Was ist der erweiterte Euklidische Algorithmus und wird er unterstützt?
Der erweiterte Euklidische Algorithmus gibt nicht nur ggT(<em>a</em>, <em>b</em>) zurück, sondern auch ganze Zahlen <em>x</em> und <em>y</em>, sodass <em>a</em>·<em>x</em> + <em>b</em>·<em>y</em> = ggT(<em>a</em>, <em>b</em>). Diese Bezout-Koeffizienten sind für modulare Inverse (und damit RSA) unerlässlich. Dieses Werkzeug berechnet nur ggT und kgV; wenn du die Koeffizienten brauchst, gibt ein kleines Python-Snippet mit <code>math.gcd</code> und einer Rücksubstitutions-Schleife, oder SymPys <code>gcdex</code>, sie dir.
Kann ich das zum Kürzen von Brüchen verwenden?
Ja. Berechne den ggT von Zähler und Nenner, dann teile beide dadurch. Das Ergebnis ist in niedrigsten Termen. Dieses Werkzeug ist der manuelle Schritt-Begleiter zum Bruchrechner der Site, der die vollständige Vereinfachung in einem Durchgang macht.
Verhalten sich negative Zahlen besonders?
Nein. Beide Eingaben werden vor dem Laufen des Algorithmus auf absolute Werte reduziert, und ggT und kgV werden als nicht-negative ganze Zahlen gemeldet, entsprechend der mathematischen Standardkonvention. Also ist ggT(-12, 8) = 4 und kgV(-12, 8) = 24, genau als wären die negativen Zahlen positiv gewesen.
Was ist Steins binärer ggT und wann würde ich ihn bevorzugen?
Steins Algorithmus (1967) ersetzt die Modulus-Operation durch Bit-Shifts und Subtraktionen. Wenn beide Operanden gerade sind, werden beide halbiert; wenn einer gerade ist, wird er halbiert; andernfalls wird der kleinere vom größeren subtrahiert. Das vermeidet ganzzahlige Division, die historisch auf Hardware teuer war. Für 32-Bit- und 64-Bit-Integer ist der Geschwindigkeitsunterschied vernachlässigbar; für 1024-Bit-BigInts oder größere kann Steins Variante messbar schneller sein.
Wie formatiert das Werkzeug das Schritt-Protokoll?
Jeder Schritt zeigt <code>a = b * q + r</code> mit dem aktuellen Rest hervorgehoben. Wenn <em>r</em> null erreicht, ist das vorherige <em>r</em> der ggT. Das ist das standard Schullehrbuch-Layout, identisch mit dem, was ein Lehrer an eine Tafel schreiben würde. Du kannst jede Zeile mit einem Klick kopieren, praktisch zum Einfügen in eine Hausaufgabe oder einen Chat.
Wie groß können die Eingaben sein?
Jede ganze Zahl bis zu <code>Number.MAX_SAFE_INTEGER</code>, was 9.007.199.254.740.991 ist. Darüber verliert JavaScripts <code>number</code>-Typ Integer-Präzision und sowohl die Modulus-Operation als auch die Ausgabe werden unzuverlässig. Für wirklich größere Eingaben eine BigInt- Implementierung in Node.js, Pythons beliebige-Präzisions-Integers oder ein dediziertes CAS verwenden.
Mehr Math & Calculators
Age Calculator
Calculate exact age in years, months and days from a birthdate.
Open toolArea & Volume Calculator
Calculate area of 2D shapes and volume of 3D solids.
Open toolBMI Calculator
Calculate your Body Mass Index and find your weight category.
Open toolByte / Bit Converter
Convert between bits, bytes, KB, MB, GB, TB and PB.
Open toolDiscount Calculator
Calculate discount amount, sale price, savings, and discounted value with optional sales tax. Supports stacked coupons.
Open toolFibonacci Sequence Generator
Generate Fibonacci numbers up to any length.
Open tool