Eine Pitagolas-Zahl (eine natürliche Zahl, die den Satz von Pitagolas erfüllt) ist eine Menge von Zahlen, die die folgende Gleichung mit a <b <c erfüllen.
a2 + b2 = c2 Zum Beispiel 32 + 42 = 9 + 16 = 25 = 52.
Es gibt nur ein Pitagoras-Triplett mit a + b + c = 1000. Berechnen Sie das Produkt abc von diesen. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%209
Zuerst habe ich es gehorsam geschrieben.
def cof1():
target=1000
(a,b,c) = (1, 1, target - 2)
ans = 0
while a < c:
while b < c:
if a**2 + b**2 == c**2:
ans = a*b*c
break
(b,c) = (b + 1, c - 1)
if ans:
break
else:
(a,b,c) = (a + 1, a + 1, target - a*2 -2)
#print ans
Ich hatte das Gefühl, dass es ineffizient wäre, jedes Mal die Quadrate von a, b und c zu überprüfen und zu berechnen.
Also habe ich im Voraus eine Liste von Quadraten von 1 bis 999 erstellt und versucht, darauf zu verweisen.
def cof2():
target=1000
sq = [x**2 for x in range(0,target)] #create
(a,b,c) = (1, 1, target - 2)
ans = 0
while a < c:
while b < c:
if sq[a] + sq[b] == sq[c]:
ans = a*b*c
break
(b,c) = (b + 1, c - 1)
if ans:
break
else:
(a,b,c) = (a + 1, a + 1, target - a*2 -2)
#print ans
Infolgedessen konnten wir 3,9 Millisekunden reduzieren (100-mal ausgeführt).
Recommended Posts