zoukankan      html  css  js  c++  java
  • 1000以内完全数(完美数)获取实现---基于python

    """
    题目:

    如果一个数恰好等于它的因子之和,则称该数为“完全数” 。各个小于它的约数(真约数,列出某数的约数,去掉该数本身,剩下的就是它的真约数)的和等于它本身的自然数叫做完全数(Perfect number),又称完美数或完备数。
    例如:
    第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。
    第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28
    那么问题来了:如何用python去求出下一个(大于28的)完全数?
    (求出1000以内所有的完全数)

    """

    #方法一

    # coding:utf-8
    a=range(1,1001)
    b=range(1,1001)
    result=[]
    for i in a:
    tmp=[]
    for k in b:
    if k<i:
    if not i%k:
    tmp.append(k)
    else:
    continue
    else:
    break
    count=0
    for m in tmp:
    count=count+m
    if count==i:
    result.append(i)
    else:
    continue
    print result


    上面的方法中,求tmp这个list中元素的和时,我们也可以通过sum函数实现,具体如下:
    #方法二
    # coding:utf-8
    a=range(1,1001)
    b=range(1,1001)
    result=[]
    for i in a:
    tmp=[]
    for k in b:
    if k<i:
    if not i%k:
    tmp.append(k)
    else:
    continue
    else:
    break
    count=sum(tmp)
    if count==i:
    result.append(i)
    else:
    continue
    print result

    #方法三
    #方法三是直接通过遍历出list a中的元素后,生成一个小于次元素的list,然后取余
    #对于range(1,0)我的解释是:range的理解应该是range是先用我们指定的条件生成一个列表,然后用for循环取出来(此句出自python核心编程第八章),range(1,0),start=1,stop=0,step=1,这样的条件生成的
    #的列表实际是上空的,即为False
    a=range(1,1001)
    perfect=[]
    for i in a:
    tmp=[]
    for k in range(1,i):
    if not i%k:
    tmp.append(k)
    count=sum(tmp)
    if count==i:
    perfect.append(i)
    print perfect

    #方法四(史上最简单的方式了)

    for i in range(1,1000):
      s=0
      for k in range(1,i):
        if i%k==0:
          s=s+k
      if i==s:
        print i



    我的猫在屋顶睡着了
  • 相关阅读:
    hdu 1124 OR toj 1065 简单数论
    this和判断的位置对赋值的要求
    快捷键操作
    常量池和堆的区别
    toString的用法
    使用泛型解决之前的问题
    不使用泛型会运行时会出现的问题
    集合图型
    代码块运行的优先级
    遍历集合的Iterator删除其中的元素
  • 原文地址:https://www.cnblogs.com/VseYoung/p/perfect_number_by_python.html
Copyright © 2011-2022 走看看