hin und wieder schaue ich mir die Probleme bei http://projecteuler.net/ an und versuche die zu lösen. Das Problem 30 verlangt, dass alle Zahlen gefunden werden, die gleich der Summe ihrer fünften Potenzen sind. Also beispielsweise ist 4150=4^5+1^5+5^5+0^5. Ich habe das auf zwei verschiedenen Wegen gelöst. Die erste untenstehende Lösung ist etwa dreimal so schnell wie die zweite. Seht ihr bei den Lösungen eventuell noch mehr Potenzial zur Verbesserung?
Lösung1:
Code: Alles auswählen
potenzen = []
for i in xrange (10):
potenzen.append(i**5)
print potenzen
zahlen = []
for i in xrange (4):
for j in xrange (10):
for k in xrange (10):
for l in xrange (10):
for m in xrange (10):
for n in xrange (10):
summe = potenzen[i] + potenzen[j] + potenzen[k] + potenzen[l] + potenzen[m] + potenzen[n]
zahl = 100000*i + 10000*j + 1000*k + 100*l + 10*m + n
if summe > zahl or zahl > 354295:
break
if zahl == summe and zahl > 1:
print zahl
Code: Alles auswählen
def zahlliste (n):
zahlen = []
while n > 0:
letzte_stelle = n % 10
zahlen.append(letzte_stelle)
n -= letzte_stelle
n /= 10
zahlen.reverse()
return zahlen
max_number = 6*9**5
for i in xrange(2,max_number+1):
a = zahlliste(i)
summe = 0
for j in xrange(len(a)):
summe += a[j]**5
if summe == i:
print summe