# 第18期-判断素数
Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。
# 1 问题描述
素数又称质数(Prime number),是指只有1和它本身两个因数的自然数,如2、3、5、7、11、13等只能被 1 和该整数整除。
质数是与合数相对立的两个概念,比1大但不是素数的数称为合数,二者构成了数论当中最基础的定义之一。
1 和 0 既非素数也非合数。
用户输入一个大于1的正整数,判断它是否为素数~
# 2 解题思路
- 首先用input函数获取用户输入的数字
- 然后根据素数的定义和特点,判断该数值是否为素数
- 最后输出判断结果
# 3 解题方法
# 方法一
num = int(input("请输入一个大于1的整数:"))
if num > 1:
for i in range(2, num):
if num % i == 0:
print(f"{num}不是素数")
break
else:
print(f"{num}是素数")
else:
print("输入错误,输入大于1的整数")
2
3
4
5
6
7
8
9
10
第1行: 用input函数获取用户输入的数值,int函数将其转化为整型,赋值给变量num
第2行: 由于素数是大于 1 的整数,用if...else语句对用户输入的数值进行判断,当该数值大于 1 时,继续判断是否为素数,否则转到第 9 行,用print函数打印 "输入错误,输入大于1的整数"
第3-6行: 用for循环遍历 2 至(num - 1)之间所有的数,由于素数只能被 1 和该整数整除,如果用户输入的数值能被 2 至(num - 1)之间的任意一个数整除,则不是素数,用break退出整个循环
第7-8行: 否则用print函数打印该数值是素数
# 方法二
num = int(input("请输入一个大于1的整数:"))
if num > 1:
for i in range(2, int(num ** 0.5 + 1)):
if num % i == 0:
print(f"{num}不是素数")
break
else:
print(f"{num}是素数")
else:
print("输入错误,输入大于1的整数")
2
3
4
5
6
7
8
9
10
第1行: 用input函数获取用户输入的数值,int函数将其转化为整型,赋值给变量num
第2行: 由于素数是大于 1 的整数,用if...else语句对用户输入的数值进行判断,当该数值大于 1 时,继续判断是否为素数,否则转到第 9 行,用print函数打印 "输入错误,输入大于1的整数"
第3-6行: 用for循环遍历 2 至根号n 之间所有的数,如果用户输入的数值能被 2 至根号n 之间的任意一个数整除,则不是素数,用break退出整个循环
第7-8行: 否则用print函数打印该数值是素数
为什么判定一个素数只要将此数被2 至根号n 整除即可???
设n为合数,n=ab
若a = b, 则a 和 b 都等于根号n
若a ≠ b,则 a, b 之中总有一个小于根号n ,另一个大于根号n
也就是说合数有大于根号n的因数存在,则必有一个小于根号n 的因数与之对应。
再换个说法,如果一个数没有小于根号n 的因数,则不能有大于根号n 的因数。
所以只检查是否有小于或等于根号n 的因数即可
# 方法三
num = int(input("请输入一个大于1的整数:"))
if num > 1:
if num == 2:
print(f"{num}是素数")
elif num % 2 == 0:
print(f"{num}不是素数")
else:
for i in range(3, int(num ** 0.5) + 1, 2):
if num % i == 0:
print(f"{num}不是素数")
break
else:
print(f"{num}是素数")
else:
print("输入错误,输入大于1的整数")
2
3
4
5
6
7
8
9
10
11
12
13
14
15
第1行: 用input函数获取用户输入的数值,int函数将其转化为整型,赋值给变量num
第2行: 由于素数是大于 1 的整数,用if...else语句对用户输入的数值进行判断,当该数值大于 1 时,继续判断是否为素数,否则转到第 14 行,用print函数打印 "输入错误,输入大于1的整数"
第3-4行: 若该数值等于2,则打印该数是素数
第5-6行: 偶数中除了2都不是质数,且奇数的因数也没有偶数,所以若该数值能被2整除,则打印该数不是素数
第7-13行: 用for循环遍历 3 至根号n 之间所有的数,如果用户输入的数值能被3 至根号n 之间的任意奇数整除,则不是素数,用break退出整个循环;否则用print函数打印该数值是素数
# 4 视频解析
高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码