如果一个数恰好等于它的因子之和,那这个数就是完全数,比如第一个数是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)。
1 # -*- coding:utf-8 -*- 2 # @Author : 飘飘_emmm 3 # 方法1: 4 a = range(1,1000) 5 b = range(1,1000) 6 perfectnum = [] 7 for i in a: 8 temp = [] 9 for j in b: 10 if j < i: 11 if i%j==0: 12 temp.append(j) 13 else: 14 continue 15 else: 16 break 17 count = 0 18 for m in temp: 19 count = count + m 20 if count ==i: 21 perfectnum.append(i) 22 else: 23 continue 24 print(perfectnum) 25 26 # 方法二: 27 for aa in range(1,1000): 28 sum = 0 29 for o in range(1,aa): 30 if aa%o == 0: 31 sum += o 32 if sum == aa: 33 print(aa)