JavaScriptsMathematik

Teiler von zwei Zahlen

Ermittelt alle gemeinsamen Teiler zweier Zahlen und auf Wunsch dazu ggT und kgV.

Hier haben wir mal wieder ein JavaScript von unserem Super_Mario: Es findet alle gemeinsamen Teiler von zwei Zahlen — also alle Zahlen, durch die sich beide Eingaben ohne Rest teilen lassen. Auf Wunsch berechnet es zusätzlich den größten gemeinsamen Teiler (ggT) und das kleinste gemeinsame Vielfache (kgV).

Tragt zwei ganze Zahlen in die Felder ein und wählt über die beiden Häkchen aus, ob neben der Teilermenge auch ggT und/oder kgV angezeigt werden sollen. Ein Klick auf „Teiler berechnen" liefert das Ergebnis in Mengenschreibweise, zum Beispiel Teiler(12,18) = {1; 2; 3; 6}.

ggT und kgV braucht man vor allem beim Bruchrechnen: Mit dem ggT kürzt man einen Bruch vollständig, mit dem kgV findet man den Hauptnenner, um zwei Brüche zu addieren. Für 12 und 18 ist der ggT 6 und das kgV 36.

Wer nur eine der beiden Größen braucht, findet im Archiv auch ein eigenes Script für den größten gemeinsamen Teiler sowie eines, das alle Teiler einer einzelnen Zahl auflistet. Verwandt ist außerdem die Primfaktorzerlegung, mit der sich ggT und kgV ebenfalls bestimmen lassen.

Mathematik Baujahr 2010 läuft in deinem Browser

Bei sehr großen Zahlen kann die Berechnung einen Moment dauern, weil jede Zahl bis zur größeren Eingabe geprüft wird.

Eingesandt von Super_Mario Script von Valentin Hammer

So funktioniert das Script

Das Script hat vier Teile: Es liest die beiden Zahlen ein, sammelt in einer Schleife alle gemeinsamen Teiler, leitet daraus ggT und kgV ab und baut zum Schluss die Ausgabe zusammen. Alles steckt in einer sofort ausgeführten Funktion, damit die Variablennamen nicht mit anderen Scripts auf der Seite kollidieren.

const zahl1 = parseInt(document.getElementById("tz-zahl1").value, 10);
const zahl2 = parseInt(document.getElementById("tz-zahl2").value, 10);

parseInt(…, 10) macht aus dem eingetippten Text eine ganze Zahl; die 10 sagt ausdrücklich „Dezimalsystem". Steht etwas Unbrauchbares im Feld, kommt der Sonderwert NaN („Not a Number") heraus — das fängt die anschließende Prüfung mit isNaN() ab. Auch die 0 wird aussortiert, denn jede Zahl teilt die 0, die Teilermenge wäre also unendlich groß.

const grenze = Math.max(Math.abs(zahl1), Math.abs(zahl2));
for (let i = 1; i <= grenze; i++) {
  if (zahl1 % i === 0 && zahl2 % i === 0) {
    teiler.push(i);
  }
}

Das ist das Herzstück: Die Schleife probiert der Reihe nach jede Zahl von 1 bis zur größeren der beiden Eingaben durch. Der Restwert-Operator % (sprich „modulo") liefert den Rest einer Division — ist er bei beiden Zahlen 0, ist i ein gemeinsamer Teiler und wird mit push() ans Array teiler angehängt. Math.abs() sorgt dafür, dass auch negative Eingaben funktionieren.

const ggt = teiler[teiler.length - 1];
const kgv = Math.abs((zahl1 * zahl2) / ggt);

Weil die Schleife von klein nach groß läuft, ist der letzte Eintrag im Array automatisch der größte gemeinsame Teiler. Das kleinste gemeinsame Vielfache folgt dann aus einer bekannten Formel: Das Produkt zweier Zahlen ist immer gleich ggT mal kgV — also ist kgV = |zahl1 · zahl2| / ggT.

const zeilen = ["Teiler(" + zahl1 + "," + zahl2 + ") = {" + teiler.join("; ") + "}"];
if (document.getElementById("tz-ggt").checked) {
  zeilen.push("ggT = " + ggt);
}

join("; ") verbindet alle gefundenen Teiler zu einem Text mit Semikolons dazwischen. Ob die Zusatzzeilen für ggT und kgV erscheinen, entscheidet die Eigenschaft checked der beiden Häkchenfelder — sie ist true, wenn das Häkchen gesetzt ist. Am Ende werden alle Zeilen mit <br> verbunden und per innerHTML in die Ergebnisfläche geschrieben.

Zum Anpassen: Wenn ihr die Teiler lieber mit Komma statt Semikolon getrennt hättet, ändert einfach den Text in join("; "). Und wer die Häkchen nicht braucht, kann die beiden if-Abfragen entfernen und die Zeilen immer anzeigen lassen.

Script für die eigene Homepage

Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.

Mehr aus der Kategorie Mathematik