You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python质数判断函数异常:输入15返回True求解决方案

问题分析与解决

你的质数判断函数输入15时返回True,核心问题是循环范围没覆盖到能整除15的最小奇数因子3。

看这段关键代码:

for j in range(3,int(math.sqrt(i))):

当i=15时,math.sqrt(15)≈3.872,转成int后是3,range(3,3)是个空序列——循环根本不会执行,函数直接跳过检查返回了True。

修正方法

方法1:扩展循环结束范围

把循环的结束值改为int(math.sqrt(i)) + 1,确保包含平方根的整数部分:

import math

def isPrime(i):
    if i == 2 or i == 3:
        return True
    if i < 2:
        return False
    if i % 2 == 0:
        return False
    # 加1让循环覆盖到sqrt(i)的整数部分
    for j in range(3, int(math.sqrt(i)) + 1):
        if i % j == 0:
            return False
    return True

while True:
    print(isPrime(int(input())))

测试输入15时,循环会检查j=3,触发15%3==0的判断,返回False,结果正确。

方法2:用整数平方根函数(Python 3.8+)

Python 3.8及以上提供的math.isqrt()直接返回非负整数的平方根(向下取整),能避免浮点数转换的潜在问题,代码更简洁:

import math

def isPrime(i):
    if i == 2 or i == 3:
        return True
    if i < 2:
        return False
    if i % 2 == 0:
        return False
    sqrt_i = math.isqrt(i)
    for j in range(3, sqrt_i + 1):
        if i % j == 0:
            return False
    return True

while True:
    print(isPrime(int(input())))

额外优化建议

调整判断顺序+只检查奇数因子,提升代码逻辑清晰度和效率:

import math

def isPrime(i):
    if i < 2:
        return False
    if i == 2 or i == 3:
        return True
    if i % 2 == 0:
        return False
    sqrt_i = math.isqrt(i)
    # 步长设为2,只检查奇数因子
    for j in range(3, sqrt_i + 1, 2):
        if i % j == 0:
            return False
    return True

内容的提问来源于stack exchange,提问作者Thái Dương Phạm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:19:58