该代码应查找具有500个除数的第一个三角数的值。 ProjectEuler的问题12。我已经利用其他人的帮助在p上将整数除以零错误。在这一点上,我想知道是否有人对如何简化问题提供了建议。 (找到第一个有100个除数的三角数大约需要1分钟,而有500个除数永远不会结束)。目前,我正在尝试寻找一种我可以利用的数学属性,因为尝试跳过素数之类的事情似乎将花费几乎相同的时间。

import itertools
count = 0
j = 0
for i in itertools.count():
    count = 0
    if i > 0:
        j = i*(i+1)/2
    for p in range (1, int(j**0.5)+1):
        if j%p == 0:
            count+=1
    if count > 250:
        break
print (int(j))

最佳答案

对于j的每一个小于平方根的除数,在其平方根上恰好有一个除数。这个事实非常有用,可以计算j的除数,而仅迭代到其平方根。这大大减少了所需的工作量。

另外,if count == 500:应该是if count > 500:

我会发布代码,但是Euler项目不鼓励发布有关其问题的完整解决方案。

关于python - 错误修复,效率反馈Euler 12项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56452544/

10-16 22:51