输出N以内的完整数

描述:
    一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子
分析:
第一次:超时50%。
    使用双重循环,第二层循环到当前第一层i值的i/2,这样每次将i%j==0的值加入列表,最终列表即是顺序的因子,计算因子和==当前值决定是否输出。

第二次:正确。
    与第一次相比,这次循环到math.sqrt(i),大大减少运算量,当i%j==0是,j是因子,同理i/j也是因子,同时加入列表,最后需要list.sort()排序,再 计算因子和==当前值决定是否输出。需要注意的是本题中i/j都是4.0,5.0故要int(i/j),其次列表最后一定是本身,所以输出时要剔除最后一个值(最大值)
代码:
import math
 n=int(input())
 for i in range(5,n):
     fac=[]
     for j in range(1,int(math.sqrt(i))+1):
         if i%j==0:
             fac.extend([j,int(i/j)])
     if sum(fac)-i==i:
         print(i,end=' ')
         fac.sort()
         for k in fac[:-1]:
             print(k,end=' ')
         print() 
补充:2020/1/19
bug:没有考虑到例如25=5*5,用上述代码就会产生[1,25,5,5]的因子列表
原文地址:https://www.cnblogs.com/thgpddl/p/12368450.html