项目欧拉#34:我在我的解决方案中找不到错误

时间:2015-08-13 17:27:13

标签: python math

我正在解决以下问题:

145是一个奇怪的数字,为1! + 4! + 5! = 1 + 24 + 120 = 145。

求所有数字的总和等于其数字的阶乘之和。

注意:为1! = 1和2! = 2不是它们不包括的总和。

这是我的代码:

import math


#upper bound taken from    http://math.stackexchange.com/questions/620877/project-euler-34-find-a-mathematical-approach-for-upper-bound
for x in range (1,2177281):
    #s refers to the sum of factors
    s=0
    for i in str(x):
        s=s+math.factorial(int(i))
        if s==x:
            print(s)

回报是:

>>>
1
2
145
40585
>>>

这些数字都有效,但我根据各种在线资料显然也遗漏了其他数据。

我不需要任何人重写代码,但如果有人能解释我的逻辑错误,那就会有所帮助。

1 个答案:

答案 0 :(得分:0)

你得到的结果是正确的。该范围内只有四个具有此属性的数字:1,2,145和40585。

你不需要在循环内依次比较数字的每一个数字,最后比较就足够了,即:

import math

for x in range (3,146):
    #s refers to the sum of factors
    s=0
    for i in str(x):
        s=s+math.factorial(int(i))
    if s==x:
        print(s)