少儿编程之趣味数学2:完全数/完美数

这是少儿编程趣味数学系列教程的第二篇,讨论如何通过编程的方式判断一个自然数是否为完美数(完全数)。

什么叫完美数/完全数?

完美数(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判断一个自然数是否为完全数

我们可以用一种直接的方式来判断一个自然数是否为完全数:

  1. 首先求出该自然数除自身之外的所有因数
  2. 将所有因数相加,得到和
  3. 将因数相加得到的和和自然数本身进行比较,如果相等,则为完美数,否则,不是完美数。

下面是Python代码:

  1. # 判断一个数是不是完美数
  2. n = int(input("输入一个自然数:"))
  3. # 求出除自身外的所有因数
  4. def get_factors(n):
  5. factors = []
  6. for i in range(1, n//2+1): #想想这里的范围为什么是1-n//2+1
  7. if(n % i == 0):
  8. factors.append(i)
  9. return factors
  10. factors = get_factors(n)
  11. # 求出所有因数(自身除外)的和
  12. sm = 0
  13. for j in factors:
  14. sm += j
  15. if(sm == n):
  16. print(n, "是完全数")
  17. else:
  18. print(n, "不是完全数")

可以点击使用Python判断完全数直接运行。

Scratch实现的判断完全数的方法

下面为使用Scratch实现的判断一个自然数是否为完全数的代码:

其中,“求因数”的自定义模块代码如下:

读者可以思考一下这些Scratch代码哪些地方可以优化?为什么?


题图来自Pixabay,欧几里得雕像照片来自Wikipedia。


微信扫一扫,分享此文章

少儿编程教学平台

联系我们

微信

aguibo002

邮箱

haoxuehaojiao在163.com

Loading
我们已经收到您的信息,将尽快联系您!