【发布时间】:2012-02-07 19:21:26
【问题描述】:
可能的剧透警告
我花了很长时间试图改进这个算法并找出问题所在,但我似乎无法弄清楚为什么输出的答案不正确。
我正在尝试解决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 问题中,它会说它不正确。
我做错了什么?
【问题讨论】:
-
您的初始输出与问题陈述中的示例输出不匹配 - 28 应该是第一个具有六个除数的三角形数。
-
@Odomontois - 我知道,但看看你是否search project euler 目前有 4554 个结果,所以我并不孤单。到目前为止,我也完成了所有这些工作,甚至没有使用任何其他网站,但我真的被困在了这个网站上
-
您可能想查看我为某些工具创建的“eulerlib”。