如果一个数恰好等于它的因子之和,那这个数就是完全数,比如第一个数是6,它的约数有1,2,3,6,除去6本身外6=1+2+3,第二个完全数是28=1+2+4+7+14,那么问题来了:求出1000以内完全数。
分析过程:首先,要求出一个数字n的所有因子,即对1-n分别取余,余数为0即可;其次,再将这个数的所有因子(除了n本身)求和,如果等于n, 那么n就是完全数(perfect number)。
# -*- coding:utf-8 -*-
# coding=utf-8
# coding:utf-8
# 方法1:
a = range(1,1000)
b = range(1,1000)
perfectnum = []
for i in a:
temp = []
for j in b:
if j < i:
if i%j==0:
temp.append(j)
else:
continue
else:
break
count = 0
for m in temp:
count = count + m
if count ==i:
perfectnum.append(i)
else:
continue
print(perfectnum)
# 方法二:
for aa in range(1,1000):
sum = 0
for o in range(1,aa):
if aa%o == 0:
sum += o
if sum == aa:
print(aa)