这是少儿编程趣味数学系列教程的第二篇,讨论如何通过编程的方式判断一个自然数是否为完美数(完全数)。
什么叫完美数/完全数?
完美数(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判断一个自然数是否为完全数
我们可以用一种直接的方式来判断一个自然数是否为完全数:
- 首先求出该自然数除自身之外的所有因数
- 将所有因数相加,得到和
- 将因数相加得到的和和自然数本身进行比较,如果相等,则为完美数,否则,不是完美数。
下面是Python代码:
# 判断一个数是不是完美数
n = int(input("输入一个自然数:"))
# 求出除自身外的所有因数
def get_factors(n):
factors = []
for i in range(1, n//2+1): #想想这里的范围为什么是1-n//2+1
if(n % i == 0):
factors.append(i)
return factors
factors = get_factors(n)
# 求出所有因数(自身除外)的和
sm = 0
for j in factors:
sm += j
if(sm == n):
print(n, "是完全数")
else:
print(n, "不是完全数")
可以点击使用Python判断完全数直接运行。
Scratch实现的判断完全数的方法
下面为使用Scratch实现的判断一个自然数是否为完全数的代码:
其中,“求因数”的自定义模块代码如下:
读者可以思考一下这些Scratch代码哪些地方可以优化?为什么?
题图来自Pixabay,欧几里得雕像照片来自Wikipedia。