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

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

相关推荐
2401_879693871 天前
Python深度学习入门:TensorFlow 2.0/Keras实战
jvm·数据库·python
牛奶1 天前
AI辅助开发最佳实践:2026年新方法
前端·aigc·ai编程
张李浩1 天前
Leetcode 054螺旋矩阵 采用方向数组解决
算法·leetcode·矩阵
xixihaha13241 天前
将Python Web应用部署到服务器(Docker + Nginx)
jvm·数据库·python
big_rabbit05021 天前
[算法][力扣101]对称二叉树
数据结构·算法·leetcode
美好的事情能不能发生在我身上1 天前
Hot100中的:贪心专题
java·数据结构·算法
xixihaha13241 天前
Python游戏中的碰撞检测实现
jvm·数据库·python
C澒1 天前
微前端容器标准化:公共能力标准化
前端·架构
2301_821700531 天前
C++编译期多态实现
开发语言·c++·算法
Setsuna_F_Seiei1 天前
AI 对话应用之 JS 的流式接口数据处理
前端·javascript·ai编程