Python【习题】完数:编程找出1000以内的所有完数

Python【习题】完数:编程找出1000以内的所有完数_第1张图片
人生苦短,我用Python

完数的定义:

什么是因子?
假如整数n除以m,结果是无余数的整数 n % m == 0,那么我们称m就是n的因子.需要注意的是,唯有被除数,除数,商皆为整数,余数为零时,此关系才成立.

什么是“完数”:
一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.

编程找出1000以内的所有完数。

  • 实现找出完数功能:

环境:Windows 10 64-bit, python == 3.6.4 , PyCharm CE == 2018.1

for i in range(2,1001):   # 遍历1000以内的所有数,从2 开始
    s = i    # 把取出的数赋值给另一个变量s,用于与所有因子作差,若果减去所有的因子后结果为0,这个数即为完数。
    for j in range(1,i):    # 查找因子
        if i % j == 0:    # 找出因子
            s -= j      # 与因子作差
    if s == 0:     # 判断是否是完数
        print(i)     # 打印完数
  • 完善:
for i in range(2,1001): 
    k = []   # 用于收集一个数的所有因子
    n = -1  #
    s = i  
    for j in range(1,i): 
        if i % j == 0: 
            n += 1
            s -= j 
            k.append(j) # 收集所有因子
    
    if s == 0: 
        print(i,":")   # 打印完数
        for j in range(n):   # 遍历完数的所有因子
            print(str(k[j]),end='+ ')   # 打印出所有的因子
        print(k[n]) # 打印

你可能感兴趣的:(Python【习题】完数:编程找出1000以内的所有完数)