Python质数判断函数异常求助:测试结果与预期不符
问题排查与修复方案
你的质数判断代码存在两个关键逻辑错误,导致测试结果不符合预期,我来逐一拆解:
1. 循环内过早返回结果
你的代码在for循环里,只检查了第一个因数就直接返回结果:
- 比如测试
x=333时,第一个检查的是2,333%2≠0,代码立刻返回Prime,但完全没检查后续的3(333÷3=111,显然不是质数) - 正确的逻辑应该是:只有当所有小于等于√x的数都不能整除x时,才返回
Prime;只要有一个数能整除,就返回Not prime
2. 未处理边界情况
当x=2时,math.sqrt(2)≈1.414,int(math.sqrt(x)+2)得到3,所以range(2,3)生成的是[2],此时2%2==0,代码返回Not prime,但2是最小的质数,这说明代码没有处理x≤2的特殊情况:
- x<2:不是质数(比如1、0、负数)
- x=2:是质数
修正后的代码
import math def pr(x): # 处理边界情况 if x <= 1: return 'Not prime' if x == 2: return 'Prime' # 偶数直接排除(除了2) if x % 2 == 0: return 'Not prime' # 只检查奇数因数,提升效率 for n in range(3, int(math.sqrt(x)) + 1, 2): if x % n == 0: return 'Not prime' # 所有因数都检查完,没有整除的情况 return 'Prime'
代码说明
- 先处理x≤1、x=2的边界,避免进入不必要的循环
- 提前排除偶数(除了2),减少一半的循环次数
- 循环只检查从3开始的奇数,直到√x(因为如果x有大于√x的因数,那对应的另一个因数必然小于√x)
- 只有当所有可能的因数都检查完毕且没有整除时,才返回
Prime
测试一下你的两个案例:
- 输入
x=2:直接返回Prime,符合预期 - 输入
x=333:循环检查到3时,333%3==0,返回Not prime,符合预期
内容的提问来源于stack exchange,提问作者Lettever
相关产品推荐
相关产品推荐

