该代码应查找具有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/