zoukankan      html  css  js  c++  java
  • 输出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]的因子列表
  • 相关阅读:
    bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊
    1691: [Usaco2007 Dec]挑剔的美食家
    CF809E Surprise me!
    「总结」狄利克雷卷积,莫比乌斯反演和杜教筛
    AT3611 Tree MST
    AT2134 Zigzag MST
    CF891C Envy
    【HNOI2018】游戏
    【HNOI2016】树
    【HNOI2016】网络
  • 原文地址:https://www.cnblogs.com/thgpddl/p/12368450.html
Copyright © 2011-2022 走看看