如何减少此代码更快?

时间:2014-11-09 23:26:19

标签: python performance

这是我在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)

这需要很长时间才能计算出来。我的目标是学习如何更好地分析此代码以及如何减少计算资源。

2 个答案:

答案 0 :(得分:1)

我能看到的一个直接进展是:

  

提示:

     

有一个简单的算术公式给出第n个三角形数字。

答案 1 :(得分:1)

如果我们谈论Project Euler 12,

首先应该将停止条件改为500以上,因为问题是“超过500除数”。 不要遍历所有数字并检查它们是否为三角形。生成三角形数字并检查它有多少除数。生成三角形数字很简单,只需查看模式即可。 检查数字是否是除数可以在O(sqrt(n))中完成,只需找到直到sqrt(n)的数量,然后乘以2(如果数字是squre则为边缘条件)。 这应该使您的程序运行得足够快