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



    我的猫在屋顶睡着了
  • 相关阅读:
    笨方法学python笔记
    Orchard CMS 单点解决方案(SSO)及两种身份认证模块的介绍
    Orchard Oauth身份认证模块,在原基础上支持百度,豆瓣,开心,QQ,人人,新浪,淘宝
    凉鞋
    第一天
    网络编程vc++、socket机制
    定时器
    界面的多语言切换/通过读取xml文件实现
    svn快速教程
    文件读写
  • 原文地址:https://www.cnblogs.com/VseYoung/p/perfect_number_by_python.html
Copyright © 2011-2022 走看看