Возможное предупреждение о спойлере
Я потратил целую вечность, пытаясь улучшить этот алгоритм и выяснить, что происходит, но я не могу понять, почему выводимый ответ неверен.
Я пытаюсь решить Project Euler # 12 , чтобы получить наименьшее треугольное число, имеющее более 500 делителей, но он говорит, что мой ответ неверен.
Вот мой код Python:
import time
# function to get the number of divisors
def div(n):
d=2
for i in range(2,int(n**.5)+2):
if (n % i) == 0:
d += 1
return d
start = time.time()
w = True
n=m=1
while w:
n += 1
s = (n*(n+1))/2 # nth triangle number
r = div(s)
if r > m:
m = r
print s,"has",r,"divisors"
if r > 500:
w = False
print "Solved in",((time.time()-start)*1000),"milliseconds"
И вывод для этого кода такой (через 66 секунд):
3 has 2 divisors
6 has 4 divisors
36 has 6 divisors
120 has 9 divisors
...
76576500 has 289 divisors
103672800 has 325 divisors
236215980 has 385 divisors
842161320 has 513 divisors
Solved in 65505.5799484 milliseconds
Однако, если я ввожу 842161320 в задачу Project Euler, он говорит, что это неправильно.
Что я делаю не так?