题目:编程求10000以内的完全数。
完全数:数字所有真因子(即除了自身以外的约数)的和,等于数字本身。
例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。
第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
正确结果:[6, 28, 496, 8128]
参考答案:
答案1:(效率高)
def fun(n):
result = []
for i in range(2, n):
max_num = i
factor = 1
count = 0
while factor < max_num:
if i % factor == 0:
count += factor + max_num
factor += 1
max_num = i / factor
if factor == max_num and factor * max_num == i:
count += factor
if count / 2 == i:
(i)
return result
print(fun(10000))
答案2:(效率低)
def fun(n):
result = []
for i in range(1,n):
count = 0
for j in range(1, i):
if i%j==0:
count += j
if j*2>=i:
break
if i == count:
(i)
return result
print(fun(10000))
The End