以下是解决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之外,找到了应该在这里的所有数字。
发生了什么事?
答案 0 :(得分:2)
看起来您的程序正在找到完美数字以及友好数字:0,6,28,496和8128是前五个完美数字。请记住,友好的数字成对出现;前五个完美数字没有,根据定义,不能有匹配的对,这将使他们成为一个友好的数字。
根据定义,完美数字的除数将总和回到完美数字,即divisor_sum(divisor_sum(6))
== divisor_sum(6)
编辑:正如评论者在写这篇文章时指出的那样,你需要这样的东西:
if divisor_sum(a)!=a