我正在解决以下问题:
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
>>>
这些数字都有效,但我根据各种在线资料显然也遗漏了其他数据。
我不需要任何人重写代码,但如果有人能解释我的逻辑错误,那就会有所帮助。
答案 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)