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%的代码适用于所有除数,并且我从列表开始只是将变量分配给最大的三角和。

为什么我的代码仍然这么慢?任何帮助将不胜感激,谢谢。

最佳答案

您可以尝试通过简单地添加来减少总和的计算

i = 1
tri = i
while divisors < 100:
    tri += i
    # do something
    i += 1


另外,在寻找除数时不要求三

int(tri / 2)


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

关于python - 为什么我的欧拉12号项目的代码这么慢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32280468/

10-13 08:06