完数定义:某自然数除它本身以外的所有因子之和等于该数,则该数被称为完数。
例如6的因子为123,而6=1+2+3,因此6是完数。
1不是完数。
import math
from functools import reduce
def factors(num):
result=[]
for i in range(1,int(math.sqrt(num))+1):
if num%i==0 and i!=num: #考虑num=1 i=1时,1不能除以本身1
result.append(i)
if i!=(num//i) : #考虑25这样的num,5是因子,只需加入1个5到result即可
result.append(num//i)
return result
for i in range(1,1001): #遍历1-1000
result=factors(i) #执行factors函数
try:
sum=reduce(lambda x,y:x+y,result) #如果i=1,reduce为空会报错,此处用try..except
if i==sum:
print('%s its factors are %s'%(i,','.join(str(i) for i in sorted(result))))
except Exception as e: #打印异常情况
print('%s无除本身以外的因子'%i)
执行结果: