Oehm ya ich soll mit einem Programm z.B 2 Brueche addieren und
dann maximal kuerzen. Dabei gehe ich wie folgt vor und wuerde
gern erfragen, ob das klappt:
Generell ist die Frage schon richtig gestellt. Ein Programm soll funktionieren und nicht durch „elegante“ Optimierungen das letzte bisschen Performance rauskitzeln.
Dafür haben wir ja Computer, dass sie für uns rechnen, nicht wir für sie denken.
AAABER: Ein Programm muss auch in angemessener Zeit fertig werden. Wenn du mit 17stelligen Zahlen rechnest, kannst du evtll. das Ergebnis zum Renteneintritt genießen - falls es dann noch Renten gibt.
Erstmal multipliziere ich die Nenne miteinander sowie die
Zaehler mit dem jeweils anderen Nenner, um die Brueche auf
einen Hauptnenner zu bringen.
Zwischenfrage 1: Ist das okay, dass der neue Nenner
[irgend]ein Vielfaches der Nenner ist und nicht das KgV?
Meiner Meinung ja, denn um das KgV zu bestimmen, musst du ja (fast) genau das machen, was du später ohnehin tust: Teilbarkeiten bestimmen.
Also hast mur 1 mögliche Fehlerquelle, statt 2.
Nun werden die Brueche mit Hilfe das Hauptnenners addiert und
es geht ums kuerzen:
Wenn ich mich recht erinnere, ja.
Eine Schleife wird durchlaufen von 2 bis über 9000!!
Meinst du 9000-Fakultät? Also 1*2* … *9000?
Dann wird das mit der Rente kritisch. und 9000 als Grenze würde für Zahlen bis 9000*9000 reichen, also 81 Mio.
Scheint mit eine unnötige Grenze zu sein.
und bei
jeder Zahl wird geprueft, ob sich sowohl Zaehler und nenner
dadurch teilen lassen. Falls ja, dann wird geteilt und der
neue Bruch durchlaeuft dieselbe Schleife von vorne.
Das Verfahren ist zwar einfach und dürfte funktionieren, aber ein bisschen Nachdenken musst du schon, wegen Performance:
Zunächst solltest du mal prüfen, ob der Zähler wesentlich kleiner als der Nenner ist. Bei 2/521584564654651 weiß man sofort, dass nicht weiter gekürzt werden kann.
Außerdem hast du ja noch die ursprünglichen Nenner. Der Gesamtnenner kann ja keine Faktoren enthalten, die dort nicht schon vorkommen.
Beispiel: a/b + c/d = a*d+c*b/b*d
Ein Faktor kann nie größer sein als Wurzel(b) und Wurzel(d).
UND: Ein Faktor kann natürlich mehrfach vorkommen, aber eine Zahl, die beim ersten Durchlauf kein Faktor ist, ist es auch beim zweiten nicht. Wenn du z.B. beim ersten Durchlauf die 7 als Faktor ermittelst, musst du beim zweiten nur die Sieben und die >7 prüfen, usw.
Anm. d. Red: Ich weiss, dass es guenstiger waere, lediglich
Primzahlen zu durchlaufen anstatt alle Zahlen.
Aber um die Primzahlen zu bestimmen, ist wahrscheinlich mehr Aufwand nötig als für „stupides“ Durchprobieren.
Dann viel Spaß, Zoelomat