这是我在python中的代码:
def Problem12():
i = 0
a = 0
c = 1
while True:
i2 = 1
i += 1
while True:
if(tNum(i)%i2 == 0):
c += 1
if(c == 5):
return tNum(i)
if(i2 == tNum(i)):
i += 1
i2 = 0
c = 0
i2 += 1
def tNum(stop):
i = 0
a = 0
while True:
i += 1
a += i
if(i == stop):
return a
print ">| Your answer is:",Problem12()
输出:
>| Your answer is: 28
如果你可以运行它,它会快速回答,但如果我们改变:
if(c == 500):
return tNum(i)
这需要很长时间才能计算出来。我的目标是学习如何更好地分析此代码以及如何减少计算资源。
答案 0 :(得分:1)
我能看到的一个直接进展是:
提示:
有一个简单的算术公式给出第n个三角形数字。
答案 1 :(得分:1)
如果我们谈论Project Euler 12,
首先应该将停止条件改为500以上,因为问题是“超过500除数”。 不要遍历所有数字并检查它们是否为三角形。生成三角形数字并检查它有多少除数。生成三角形数字很简单,只需查看模式即可。 检查数字是否是除数可以在O(sqrt(n))中完成,只需找到直到sqrt(n)的数量,然后乘以2(如果数字是squre则为边缘条件)。 这应该使您的程序运行得足够快