教育 小朋友的算法系列
判断质数的算法实现
这是和小朋友的一个数学游戏。比如,我们会在走路的时候,计算一个24点的题,或者在机场候机时,根据航班号,计算24点。
在更小一些的时候,做过0到100之间的质数的口头枚举。四年级暑假,在外面度假路上,我们一边走,一边玩互相给对方出数字,判断是否是质数的游戏。
只是一个游戏,并没有什么深远和特别的用意,或者说这只是打发时间的一个方式。
玩了小游戏之后,让小朋友试试用代码来实现一个判断素数的函数。下面是依次写的几个版本。
1
def is_prime(num):
dog = int(input("随便输入一个数"))
for i in range(2,9,1):
if dog %i== 0:
print(f" 这是一个质数{dog/i} ")
return "🍩"
else:
print("这不是一个质数 ")
print(is_prime(9))
第一个版本,不完全正确,判断的除数没有穷尽,条件判断语句的关系没有写好。 这个版本是第一天的时候写的。
2
cat = int(input("输入1个从2开始的数"))
def is_prime (cat):
if cat == 1:
print("从2开始哦")
return cat
for i in range(2 , cat-1, 1):
if cat % i ==0 :
print("这不是一个质数")
return cat, i
if cat % i != 0:
print("这是一个质数")
print(is_prime(cat))
第一个版本写完以后,当天没有马上修正和优化。第2个版本以及随后的版本,都是在第三天完成的。 第2个版本里面把条件判断语整理了一下,纠正了判断的除数的穷尽问题,也加上了用户输入1的时候的判断。
3
cat = int(input("输入1个从2开始的数"))
def is_prime (cat):
if cat == 1:
print("从2开始哦")
return cat
if cat % 2 == 0 :
print("这不是一个质数")
return cat, 2
for i in range(3 , (cat-1)/2, 2):
if cat % i ==0 :
print("这不是一个质数")
return cat, i
if cat % i != 0:
print("这是一个质数")
print(is_prime(cat))
在这个版本,我们讨论了程序执行的性能问题。 通过举例子,比如 19 ,需要判断的除数分别是哪几个,在纸上写出来以后,小朋友自主实现了先判断输入的是不是一个双数的问题。
然后关于除数要试到几为止的问题,小朋友自主提出了一个看法,只需要除到输入的参数的一半为止就可以,并解释了其中的逻辑。这个自主提出的想法并且加以实现的方法,让我有点汗颜。
4
cat = int(input("输入1个从2开始的数"))
def is_prime (cat):
if cat == 1:
print("从2开始哦")
return cat
if cat % 2 == 0 :
print("这不是一个质数")
return cat, 2
import math
tom=int(math.sqrt(cat))+1
for i in range(3 , tom, 2):
if cat % i ==0 :
print("这不是一个质数")
return cat, i
if cat % i != 0:
print("这是一个质数")
print(is_prime(cat))
因为小朋友还没有学习过平方和开方,我把这个知识点讲了一下,把除数判断推进到开方,并介绍了sqrt这个实现函数。
5
cat = int(input("输入1个从2开始的正整数"))
def is_prime (cat):
# 判断输入的参数是否为质数
# 输入 cat ,一个正整数
# return 返回 (True/质数 , 0) 或者 (False/非质数, 能被整除的数)
import math
if cat < 2:
print("从2开始哦")
return False, cat
#如果能被2除掉就直接返回
if cat % 2 == 0 :
print("这不是一个质数")
return False, 2
#先加载数学模块再让 tom = cat 的开方
tom=int(math.sqrt(cat))+1
for i in range(3 , tom, 2):
#判断是不是质数
if cat % i ==0 :
print("这不是一个质数")
return False, i
return True, 0
print(is_prime(cat))
这是在当天完成的版本,我们一起整理了代码,共同写了函数的注释。
tag: 教育 编程
权利声明: 未经许可,不得转载。