# 第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的整数")
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的整数")
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的整数")
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例源代码
AI大学堂公众号.png

更新于: 12/28/2021, 7:43:14 AM