第18期-判断素数

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的整数")
View Code
复制代码

第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的整数")
View Code
复制代码

第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的整数")
View Code
复制代码

第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函数打印该数值是素数

 

posted @   LG03  阅读(270)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示