题目如下:
求1000以内所有的完数
例: 6 = 1+2+3
要求:输出完数即它的分解因子
(我将一步步都分开来写,便于初学者理解,有更加简洁的方法,网上很多,这里就不写了。)
a = 2
half = 0 #为此时计算数字的一半
MyList = [] #保存不是素数的所有分解因子
flag = False #判断是否有分解因子 False为素数 True表示有分解因子
sum = 0
while a<=1000:
half = a//2
while half>=1:
if a%half == 0: #找到一个分解因子
MyList.append(half) #将分解因子存入数组中
flag = True
half = half-1 #将half减一,一直进行while循环找出所有的分解因子
if flag==True:
for x in MyList: #将所有因子相加
sum += x
if sum == a: #说明是完数
print(a,'是一个完数。分解因子为:')
for y in MyList: #输出所有的分解因子
print(y,end=' ')
print('\n')
a += 1 #判断完一个数以后,将相关条件都重置
MyList = []
flag = False
sum=0
写这个小程序时候遇到点小问题,一开始一个数都没有,我就把while a<=1000值变小为10,这样至少可以输出一个6如题。但是也没有,于是我在中间插入 print(MyList) 把其中的数组输出看看如下图:
发现一个1都没有,找到问题了,原来之前 half>=1: 我写成了 half>1: 所以一直少1这个分解因子,最后一个数也没有,改了以后就解决了。