Python素数判断代码输入99误判为素数,求错误排查与修复方案
代码错误原因分析
- 核心判断逻辑错误:循环内始终使用
num%2==0做整除判断,而非对遍历变量i做判断,本质只实现了奇偶校验,无法识别99这类能被2以外的数整除的非素数。 - 循环赋值逻辑错误:每次循环都会覆盖
prime的取值,即便中途找到了能整除的因数,后续遍历到无法整除的i时也会把prime重新设为True,导致判断结果被覆盖为错误值。
修复方案
调整判断逻辑:初始化prime为True,遍历过程中只要找到任意一个能整除的i就立即将prime设为False并终止循环,无需继续遍历。
修复后代码如下:
num = int(input('Enter a positive no.\n')) prime = True if num == 1: prime = False elif num == 2: prime = True else: # 优化:只需遍历到数字的平方根即可,大幅提高大数字的判断效率 for i in range(2, int(num**0.5) + 1): if num % i == 0: prime = False break # 找到因数直接终止循环,避免后续覆盖结果 if prime: print('Prime no.') else: print('Not a prime')
测试验证
输入99测试时,循环到i=3时触发99%3==0的条件,prime设为False后直接break,最终输出Not a prime,结果符合预期。
内容的提问来源于stack exchange,提问作者Harshit Jadiya
相关产品推荐
相关产品推荐

