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

Python素数检测程序判定失效 15/21/99等合数被误判为素数

Python素数检测程序误判合数问题

问题现象

编写的Python素数检测程序存在逻辑异常,输入15、21、99这类合数时,程序会错误将其判定为素数,无法输出正确的检测结果。
问题复现代码如下:

while True:
    number = input("Enter the number: ")
    new_number = int(number)-1

    while int(new_number)>1:
        detector = int(number)%int(new_number)
        new_number-=1
    if detector==0:
        print("its not a prime number")
    else:print("its a prime number")

错误原因

  • 变量detector仅会保存内层while循环最后一次运算的结果,也就是除数为2时的取模值,循环过程中出现过的整除结果会被后续运算覆盖。以输入15为例,循环从14开始递减,除数为3时15%3=0本应判定为非素数,但程序会继续执行循环直到除数为2,此时15%2=1,最终detector值为1,就会输出素数的错误结果。
  • 内层循环没有在发现整除情况时提前终止,也没有设置专门的状态位记录是否存在除1和数字本身外的其他因数。
  • 没有做输入边界校验,输入小于2的数字时会出现判定错误。

修复后代码

while True:
    number = int(input("Enter the number: "))
    # 处理小于2的边界情况
    if number < 2:
        print("its not a prime number")
        continue
    is_prime = True
    new_number = number - 1
    while new_number > 1:
        if number % new_number == 0:
            is_prime = False
            # 发现因数直接跳出循环,减少无效计算
            break
        new_number -= 1
    if is_prime:
        print("its a prime number")
    else:
        print("its not a prime number")

内容的提问来源于stack exchange,提问作者ريان الجزيري

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:31:15