欧拉#21,我的解决方案中的额外数字

时间:2015-08-03 20:14:48

标签: python math

以下是解决Euler #21, Evaluate the sum of all the amicable numbers under 10000的代码。

def divisor_sum(x):
divisor_sum=0
for i in range(1,x):
     if x%i==0:
        divisor_sum=divisor_sum+i
return(divisor_sum)

for a in range (10000):
if divisor_sum(divisor_sum(a))==a:
    print(a)

回复是:

0
6
28
220
284
496
1184
1210
2620
2924
5020
5564
6232
6368
8128

我知道它想要总和,但是为了检查我的代码我运行了它总结的数字,因为总和是错误的。

奇怪的是,当我look online时,除了0,6,28,496,8128之外,找到了应该在这里的所有数字。

发生了什么事?

1 个答案:

答案 0 :(得分:2)

看起来您的程序正在找到完美数字以及友好数字:0,6,28,496和8128是前五个完美数字。请记住,友好的数字成对出现;前五个完美数字没有,根据定义,不能有匹配的对,这将使他们成为一个友好的数字。

根据定义,完美数字的除数将总和回到完美数字,即divisor_sum(divisor_sum(6)) == divisor_sum(6)

编辑:正如评论者在写这篇文章时指出的那样,你需要这样的东西:

if divisor_sum(a)!=a