求完全数个数

题面

完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。

它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。

给定函数count(int n),用于计算n以内(含n)完全数的个数。计算范围, 0 < n <= 500000

返回n以内完全数的个数。 异常情况返回-1

分析

  1. 断言完全数
  2. 平方根缩小范围,求商求模得另一因数
  3. 记录潜在完全数的因数入列表并求和
  4. 边界处理

方案

求完全数个数

入队

有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序

N = int(input().strip())
arr = [int(i) for i in (input().split(" ")[:N])]
val = int(input().strip())

def asc_sort(arr,val):
    k=-1
    for i,v in enumerate(arr):
        if val <= v:
            k = i
            break
    if k != -1:
        arr.insert(k,val)
    else:
        arr.append(val)

asc_sort(arr,val)
print(*arr)

输出

(base) D:\code-base\python\test>python -u "d:\code-base\python\test\in2.py"
5
1 6 9 22 30
8
1 6 8 9 22 30

阶乘

计 1!+2!+3!+…+n!

def fac(n):
    if n == 1:
        return 1
    return n *fac(n-1)

n = int(input())
print(sum(map(fac, range(1,n+1))))

输出

(base) D:\code-base\python\test>python -u "d:\code-base\python\test\xll.py"
3
9
本作品采用《CC 协议》,转载必须注明作者和本文链接
pardon110
讨论数量: 1
def is_perfect(num):
    s_num = 1
    for i in range(2, math.ceil(math.sqrt(num))):
        com, sur = divmod(num, i)
        if sur == 0:
            s_num += com + i

    if s_num == num:
        return True
    else:
        return False


def calculate(max_num):
    for i in range(1, max_num + 1):
        if is_perfect(i):
            print(i)


calculate(500000)
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
开发者 @ 社科大
文章
134
粉丝
24
喜欢
103
收藏
56
排名:105
访问:8.9 万
私信
所有博文
社区赞助商