Den ggt (Gemeinsamen Teiler) zweier Zahlen berechnen
-
@adii950 sagte in Den ggt (Gemeinsamen Teiler) zweier Zahlen berechnen:
Wie soll das Programm wissen wir oft eine zahl in der anderen passt?
Ich würde das per (Ganzzahl-)Divison berechnen.
-
Oder so, wie in dem Wiki-Artikel beschrieben:
#include <iostream> using namespace std; int ggt(int z1, int z2) { if(z1 == z2) return z1; if(z1 > z2) return ggt(z1 - z2, z2); return ggt(z2 - z1, z1); } int main() { int a, b; cin >> a >> b; cout << ggt(a, b); }
-
@adii950 sagte in Den ggt (Gemeinsamen Teiler) zweier Zahlen berechnen:
Wie soll das Programm wissen wir oft eine zahl in der anderen passt?
Woher weißt du das denn?
-
@DirkB also du meinst doch kein Modulo Operator?
-
@Belli Lol dort ist es echt ganz easy programmiert ich hab es etwas komplizierter programmiert
aber danke dir das du den code hier reingestellt hast
-
Die Frage ist nur, ob du den klassischen Euklid oder den moderneren nehmen sollst (mit modulo statt Subtraktion): https://de.wikipedia.org/wiki/Euklidischer_Algorithmus#Moderner_euklidischer_Algorithmus
-
@adii950 sagte in Den ggt (Gemeinsamen Teiler) zweier Zahlen berechnen:
@DirkB also du meinst doch kein Modulo Operator?
Der berechnet den Divisionsrest.
Den meinte ich nicht.Ich meine den Operator, den du in Zeile 72 (von deinem obigen Code) verwendet hast.
-
@wob Hmm stimmt was würdest du den empfehlen?
oder soll ich beides nehmen
-
@DirkB hmm ich verstehe nicht ganz wie du das meinst könntest du bitte ein kleines bespiel geben?
-
@adii950 sagte in Den ggt (Gemeinsamen Teiler) zweier Zahlen berechnen:
@DirkB hmm ich verstehe nicht ganz wie du das meinst könntest du bitte ein kleines bespiel geben?
Du kannst lesen und schreiben, daher gehe ich davon aus, dass du die Grundschule besucht hast.
Erinnere dich da an das Teilen beim Rechnen.
-
Auch hübsch:
unsigned ggt(unsigned a, unsigned b) { if(b == 0) return a; return ggt(b, a % b); }
-
Es gibt auch ein
std::gcd()
, aber da muss man<numeric>
statt<cmath>
einbinden?
-
@zeropage sagte in Den ggt (Gemeinsamen Teiler) zweier Zahlen berechnen:
Es gibt auch ein
std::gcd()
, aber da muss man<numeric>
statt<cmath>
einbinden?Guckst du: https://en.cppreference.com/w/cpp/numeric/gcd
Es ist in
<numeric>
. Ob du<cmath>
einbindest oder nicht, ist wumpe. Ich würde daher den 2. Teil deines Satzes steichen und vielleicht ersetzen:Es gibt auch ein
std::gcd
, aber da muss man<numeric>
einbinden und mindestens C++17 zur Verfügung haben - aber die Benutzung dieser Funktion liefe der Übungsaufgabe zuwider.
-
Ja, war unklar von mir.
Deine Ersetzung liest sich besser und beschreibt auch besser, was ich ausdrücken wollte.
-
@zeropage sagte in Den ggt (Gemeinsamen Teiler) zweier Zahlen berechnen:
Deine Ersetzung liest sich besser und beschreibt auch besser, was ich ausdrücken wollte.
Ich dachte, du wolltest fragen, ob das, was du geschrieben hast, korrekt ist (da war ja ein ? am Ende).
-
Ja, war ne rethorische Frage. Weil ich hatte auch mal einen ggT benötigt, ihn auch geschrieben, meinte dann aber, STL ist immer Eigenkram vorzuziehen und hatte mich gewundert, warum man statt <cmath> <numeric> einbinden muss.
Das wollte ich mal mitteilen... wollte es aber bescheiden mit einem Fragezeichen enden lassen.
-
@Belli jaaa recht easy
-
@wob alles klar danke dir ich schau mal
-
@wob sagte in Den ggt (Gemeinsamen Teiler) zweier Zahlen berechnen:
... aber die Benutzung dieser Funktion liefe der Übungsaufgabe zuwider.
Woher kennst Du die Übungsaufgabe?
-
@Belli ich hab mir die Aufgabe selbst gestellt damit ich mehr üben kann
Hättest du Ideen wie man noch mehr üben kann?