4-11判断素数

因为在之前4-4哥德巴赫猜想里有相关的代码,所以本题做起来还算轻松。正确代码如下:

python 复制代码
N=int(input())
def is_prime(i):
    if i<=1:
        return False
    if i>1 and i<=3:
        return True
    if i%2==0 or i%3==0:
        return False
    for r in range(5,int(i**0.5)+1, 6):
        if i%r==0 or i%(r+2) == 0:
            return False
    return True
for a in range(N):
    M=int(input())
    if is_prime(M):
        print("Yes")
    else:
        print("No")

下面这个是经过修改还是有问题的代码。

python 复制代码
N=int(input())
for a in range(N):
    M=int(input())
def is_prime(i):
    if i<=1:
        return False
    if i>1 and i<=3:
        return True
    if i%2==0 or i%3==0:
        return False
    for r in range(5,int(i**0.5)+1, 6):
        if i%r==0 or i%(r+2) == 0:
            return False
    return True
if is_prime(M):
    print("Yes")
else:
    print("No")

代码的逻辑错误在于缩进和循环的位置

  1. 先读入 N

  2. 循环 N 次,每次读入一个 M,但每次都覆盖掉之前的 M

  3. 循环结束后,只有最后一个输入的 M 被保留

  4. 然后只判断最后一个 M 是否为质数

以下是借鉴的另一种方法:

python 复制代码
N = int(input())

for _ in range(N):
    M = int(input())
    
    # 对当前的 M 判断是否为素数
    a = False  # 假设不是素数
    
    if M <= 1:
        a = False
    elif M <= 3:
        a = True  # 2和3是素数
    elif M % 2 == 0 or M % 3 == 0:
        a = False
    else:
        a = True  # 先假设是素数
        for r in range(5, int(M**0.5) + 1, 6):
            if M % r == 0 or M % (r+2) == 0:
                a = False
                break
    
    # 根据 a 的值输出结果
    if a:
        print("Yes")
    else:
        print("No")

第二次需要进行对a进行再次假设,因为:

  1. 进入 else 分支时,a 的值不确定(可能是上一轮的值)

  2. 需要给这个新的 M 一个初始假设值

  3. 然后通过循环验证这个假设是否正确

第二次假设不能是 False,因为:

  • 初始假设为 False 的话,素数无法被正确识别

  • 循环只能把 False 改成 False(找到因数时),无法把 False 改成 True

  • 正确的逻辑是:先假设是素数,然后找反证(找到因数就推翻假设)

相关推荐
代码搬运媛5 小时前
Jest 测试框架详解与实现指南
前端
wj3055853785 小时前
课程 9:模型测试记录与 Prompt 策略
linux·人工智能·python·comfyui
吃好睡好便好6 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
星寂樱易李6 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
counterxing6 小时前
我把 Codex 里的 Skills 做成了一个 MCP,还支持分享
前端·agent·ai编程
仰泳之鹅6 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
wangqiaowq6 小时前
windows下nginx的安装
linux·服务器·前端
qingfeng154156 小时前
企业微信机器人开发:如何实现自动化与智能运营?
人工智能·python·机器人·自动化·企业微信
之歆7 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
发现一只大呆瓜7 小时前
Vite凭什么这么快?3分钟带你彻底搞懂 Vite 热更新的幕后黑手
前端·面试·vite