Un nombre de Pitagolas (un nombre naturel qui satisfait le théorème de Pitagolas) est un ensemble de nombres qui satisfont l'équation suivante avec a <b <c.
a2 + b2 = c2 Par exemple, 32 + 42 = 9 + 16 = 25 = 52.
Il n'y a qu'un seul triplet de Pitagoras avec a + b + c = 1000. Calculez le produit abc de ceux-ci. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%209
Tout d'abord, je l'ai écrit docilement.
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
J'ai pensé qu'il serait inefficace de revoir et de calculer les carrés de a, b et c à chaque fois.
J'ai donc créé une liste de carrés de 1 à 999 à l'avance et j'ai essayé de m'y référer.
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
En conséquence, nous avons pu réduire 3,9 millisecondes (exécutées 100 fois ci-dessous).
Recommended Posts