Nach einigem Ausprobieren habe ich eine Lösung gefunden, die sehr schnell für die Project Euler Problem 5 funktioniert. (Ich habe einen anderen Weg gefunden, die korrekt den Beispielfall gelöst (Zahlen 1-10), sondern nahm eine Ewigkeit das eigentliche Problem zu lösen.) Hier geht es:Lösung für Euler Projekt Aufgabe 5: Warum funktioniert es?
def test(n):
for x in range(2,21):
if n % x != 0:
return False
return True
def thwart(n):
for x in range(2,21):
if test(n/x):
n /= x
return n
raise TypeError
num = 1
for x in range(1,21):
num *= x
while True:
try:
num = thwart(num)
except TypeError:
break
print(num)
Mein Hauptproblem zu verstehen, warum thwart(num)
wiederholt Aufruf wird genug, um zu der richtigen Lösung zu führen. (D.h. warum ist es in der Lage, die KLEINSTE Nummer zu finden und spuckt nicht irgendeine Zahl aus, die durch die Zahlen 1-20 teilbar ist?) Ich hatte nur einige vage Gedanken bei der Programmierung und war überrascht, wie schnell es funktionierte. Aber jetzt habe ich Probleme herauszufinden, warum es genau funktioniert ... Die optimierten Lösungen anderer Leute auf SO, die ich bis jetzt gefunden habe, sprachen alle über Primfaktoren, die ich nicht sehen kann, wie das zu meinem Programm passen würde ...? Jede Hilfe wird geschätzt! Vielen Dank!
Sie fragen also, wie Ihre eigene Lösung funktioniert? Können Sie versuchen zu spezifizieren, was es mit Ihrer eigenen Lösung zu tun hat, die Sie nicht verstehen? – miradulo
Ihre Lösung ist trivial. Sie müssen nichts codieren, um das 20 zu zeigen! ist durch alle Zahlen unter 20 teilbar. Die Frage ist, ob eine kleinere existiert. Also müssen Sie die für x im Bereich (1,21) ändern: num * = x und suchen Sie mehr Kandidaten –
und es funktioniert schnell, weil es nur 20 Zahlen überprüft .. –