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

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

相关推荐
Htr_7 小时前
Python面向对象编程:类与对象基础
开发语言·python
RD_daoyi7 小时前
谷歌改写了76%的标题:超60字符的,95%会被谷歌自己重写
大数据·服务器·开发语言·前端·搜索引擎·html
weixin_307779137 小时前
AI生成代码的隐患与治理:人工审查流程及提示词驱动的修复策略
开发语言·人工智能·算法
muddjsv7 小时前
Python 神经网络入门:用 scikit-learn 完成 MLP 分类与回归
python·神经网络·scikit-learn
Java后端的Ai之路7 小时前
09、Python组合模式
开发语言·人工智能·python·docker·组合模式
IMPYLH7 小时前
HTML 的 <map> 元素
前端·html
zmzb01037 小时前
C++课后习题训练记录Day201
c++·算法·图论
Tenifs7 小时前
Python Loguru 使用指南
python·loguru
lch2011_yb7 小时前
CSP-J 2023 小苹果
算法