python2.7练习小例子(十八)

    19):题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

    

#!/usr/bin/python
# -*- coding: UTF-8 -*-

from sys import stdout
for j in range(2,1001):
    k = []
    n = -1
    s = j
    for i in range(1,j):
        if j % i == 0:
            n += 1
                s -= i
                k.append(i)
    
    if s == 0:
        print j
        for i in range(n):
            stdout.write(str(k[i]))
            stdout.write(' ')
        print k[n]

    以上实例输出结果为:

6
1 2 3
28
1 2 4 7 14
496
1 2 4 8 16 31 62 124 248
    
#!/usr/bin/env python
# -*- coding: utf-8 -*-

for i in range(1, 1001):
    sum = 0
    for j in range(1, i):
        if i % j == 0:
            sum += j
    if sum == i:
        print(i)

    Python3 测试实例:

#!/usr/bin/python3

list2 = []
for x in range(1, 1001):
    list1 = []
    for i in range(1, int(x / 2) + 1):
        if x % i == 0:
            list1.append(i)
    if x == sum(list1):
        print(x)
        print(list1)
        list2.append(x)
        print("共计有%d个完数"%(len(list2)))
    
#!/usr/bin/python
# -*- coding: UTF-8 -*-
__author__ = 'Arlene'

def fun(num):
    sum = 1  # 1要加上,所以默认赋值为1
    for i in range(2, num):  # 因子不包括本身,
        if num % i == 0:
            sum += i
    if sum == num:
        return num
result = []
for num in range(2, 1000):
    test = fun(num)
    if test:   # 去掉空值
        result.append(test)
print("完数有:", result)
    
#!/usr/bin/env python

for i in range(1,1001):
    s = 0
    L = []
    for x in range(1,int((i+3)/2)):
        if i % x == 0:
            s += x
            L.append(x)
    if i == s:
         print(i)
         print(L)
    
#!/usr/bin/env python
# -*- coding: utf-8 -*-

l = []
def num(n):
    for i in range(1,n + 1):
        if n != i and n % i == 0:
            l.append(i)
    return l

for i in range(1,1001):
    sum = 0
    l = []
    m = num(i)
    if m == []:
        pass
    else:
        for j in m:
            sum += j
        if i == sum:
            print i
    
#!/usr/bin/env python
# -*- coding: utf-8 -*-

list1 = []
for j in range(2, 10001):
    l = []

    for i in range(1, j//2+1):
        if j % i == 0:
            l.append(i)
    if j == sum(l):
        list1.append(j)
        print("{}={}".format("+".join(map(str, l)), j))
    
#!/usr/bin/python
# -*- coding: UTF-8 -*-

Sn = []
for i in range(2,1001):
    for j in range(1,i):
        if i % j == 0:
            Sn.append(j)
    if i == reduce(lambda x,y : x + y,Sn):
        print i,Sn
    Sn = []

    Python3 测试:

import functools

for num in range(1,1001):
    savenum=int(num)
    list1 = []
    for idx in range(1,int(num)):
        if num % idx == 0:
            list1.append(idx)
    if functools.reduce(lambda x,y:x+y,list1,0) == savenum:
        print(savenum,list1)
    
import numpy as np

for m in range(1,1001):
    n=[1]
    for i in range(2,m):
        if m % i == 0:
            n.append(i)
    if m == np.sum(n):
        print m,n
    有什么不懂得可以参考第十三个小例子。如果感觉不错的话,请多多点赞支持哦。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值