完全数是:所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
思路:
1)找出在n范围内的每个数(num)所有的因子
2)若因子列表不为空以及因子列表中前几个因子之和等于最后一个因子,则为完全数。
拿n=1000举例:
n=1000 total=0 for num in range(1,n+1): yinzi=[] for i in range(1,num+1): if num%i==0: yinzi.append(i) if yinzi and sum(yinzi[0:-1])==yinzi[-1]: total+=1 print(yinzi)#输出因子列表,列表中最后一个值为完全数 print(total)
输出结果是:
[1, 2, 3, 6] [1, 2, 4, 7, 14, 28] [1, 2, 4, 8, 16, 31, 62, 124, 248, 496] 3
修改一下代码,即为最终答案:
import sys for n in sys.stdin: n=int(n) total=0 for num in range(1,n+1): yinzi=[]#因子列表 for i in range(1,num+1):#i是分母不可为零,但i可为它本身 if num%i==0: yinzi.append(i) if yinzi and sum(yinzi[0:-1])==yinzi[-1]:#若因子不为空且前几个因子相加等于最后一个数 total+=1 print(total)