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

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

相关推荐
Nontee7 小时前
数据类型与包装类 — 一个新手学Java的数据类型笔记
java·笔记·python
●VON7 小时前
HarmonyKit | 鸿蒙新特性:router 导航 API 从 pushUrl 到 UIContext 的演进
算法·华为·交互·harmonyos
星释7 小时前
鸿蒙智能体开发实战:31.鸿蒙壁纸大师 - 环境搭建与基础配置
算法·华为·ai·harmonyos·鸿蒙
ysa0510307 小时前
【板子】树上启发式合并
数据结构·c++·笔记·算法
谙忆10247 小时前
HTTP 图片缓存实战:Cache-Control、ETag、内容哈希文件名与 CDN 回源到底怎么配
前端
千天夜7 小时前
深入剖析 `Path(path).parent.mkdir(parents=True, exist_ok=True)` —— 优雅处理目录创建的终极方案
python
学究天人7 小时前
数学公理体系大全:第一章 命题逻辑:真值之舞
人工智能·算法·机器学习·数学建模·动态规划·图论·抽象代数
小O的算法实验室7 小时前
2025年Neurocomputing,基于LLM的进化优化器:结合精英策略推理
算法
小妖6668 小时前
React input 输入卡顿问题
前端·javascript·react.js
এ慕ོ冬℘゜8 小时前
JavaScript 数据类型检测与转换、运算符超全实战详解
前端·html