为什么Project Euler#12的代码这么慢?

时间:2015-08-28 22:09:31

标签: python python-3.x math solver

def trisum():
    divs = 1
    great = 1
    n = 1
    while divs < 500:
        divs = 1
        n += 1
        tri = sum(i for i in range(1,n+1))
        #divisors = [tri]
        for x in range(1,tri):
            if tri%x == 0:
                #divisors.append(x)
                divs += 1
            else:
                pass
        if divs > great:
            great = tri
            print(great)
        #grVal = sorted(divisors, reverse=True)        
        #print("{}: {}".format(divs,tri))
    print(great)

trisum()
s = input("")

这是我的代码来解决三角形值,可以找到超过500个除数,它适用于较小的数字,但对于500这需要很长时间,我也无法得到答案。我90%的代码适用于每个除数,我从列表中选择一个变量到最大三角形总和。

为什么我的代码仍然这么慢?非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试通过简单地添加

来减少总和的计算
i = 1
tri = i
while divisors < 100:
    tri += i
    # do something
    i += 1

另外,找到除数时不要去三,

int(tri / 2)

作为可以均匀划分任何数字的最大数字是数字的一半。 [希望这会有所帮助,我无法测试,因为我正在使用我的手机]