一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如 6=1+2+3.
编程找出 1000 以内的所有完数
如果一个数恰好等于它的因子之和,则称该数为“完全数” [2] 。 各个小于它的约数(真约数,列出某数的约数,去掉该数本身, 剩下的就是它的真约数)的和等于它本身的自然数叫做完全数(Perfect number), 又称完美数或完备数。
#!/usr/bin/env python
# coding=utf-8
# File : perfect_number.py
# Author : Allen.Z
# Mail : z_ok@me.com
# Created : Wed Sep 2 16:39:05 2020
# 一个数如果恰好等于它的因子之和,这个数就称为“完数”。
# 例如 6=1+2+3.
# 编程找出 1000 以内的所有完数
# 如果一个数恰好等于它的因子之和,则称该数为“完全数” [2] 。
# 各个小于它的约数(真约数,列出某数的约数,去掉该数本身,
# 剩下的就是它的真约数)的和等于它本身的自然数叫做完全数(Perfect number),
# 又称完美数或完备数。
def is_perfect(number):
"""
判断一个数是否为完数
"""
s = 0
for n in range(1, int(number / 2)):
if number % n == 0:
s = s + n
if s == number:
return True
else:
return False
def perfert(num):
"""
找出num 以内的完全数
"""
l = []
for n in range(1, num + 1):
if is_perfect(n):
l.append(n)
return l
def test_perfect():
p = perfert(1000)
# 第一个完全数是6,第二个完全数是28,第三个完全数是496,
# 后面的完全数还有8128、33550336等等。截至2018年,相关研究者已经找到51个完全数。
assert p == [6, 28, 496]