Python 欧拉问题21,为什么我的解中有额外的数字?

Python 欧拉问题21,为什么我的解中有额外的数字?,python,math,Python,Math,下面是我要解决的代码 def除数和(x): 除数和=0 对于范围(1,x)内的i: 如果x%i==0: 除数总和=除数总和+i 返回(除数和) 对于范围(10000)内的a: 如果除数和(除数和(a))==a: 印刷品(a) 答复是: 0 6 28 220 284 496 1184 1210 2620 2924 5020 5564 6232 6368 8128 我知道它需要求和,但为了检查我的代码,我运行了它求和的数字,因为求和是错误的 奇怪的是,当我看到这里所有的数字时,除了0,6,28,

下面是我要解决的代码

def除数和(x):
除数和=0
对于范围(1,x)内的i:
如果x%i==0:
除数总和=除数总和+i
返回(除数和)
对于范围(10000)内的a:
如果除数和(除数和(a))==a:
印刷品(a)
答复是:

0
6
28
220
284
496
1184
1210
2620
2924
5020
5564
6232
6368
8128
我知道它需要求和,但为了检查我的代码,我运行了它求和的数字,因为求和是错误的

奇怪的是,当我看到这里所有的数字时,除了0,6,28,496,8128之外,其他的都被找到了


发生了什么事?

看起来您的程序正在查找完美数和友好数:0、6、28、496和8128是前五个完美数。记住,友好的数字是成对的;前五个完全数没有,而且根据定义,也不能有一对匹配的数字使它们成为友好的数字

根据定义,一个完美数的除数将和回到完美数,这意味着
除数之和(除数之和(6))
==
除数之和(6)

编辑:正如我写这篇文章时评论人士指出的,你需要这样的东西:

if divisor_sum(a)!=a

6是不友好的,因为问题是
a!=b
。28I的情况也是一样,即b=除数和(a);如果是b和a==除数和(b):谢谢你解决了它。对于那些对我的修复方式感到好奇的人来说,我在倒数第二行添加了以下内容:“'if divisior_sum(a)=你链接的那篇文章实际上解释了这一点:
(M;N),M