Python查找下一个素数代码运行结果错误问题求助
问题原因分析
- 核心错误是内层
for循环的else代码块缩进错误:你当前把else和if (next % i) == 0对齐,导致只要第一个除数(i=2)不能整除当前数,就会直接返回该数。比如输入32时第一个检查的数是33,33%2=1≠0,就直接错误返回33,没有继续检查后续的i=3等除数。 - 变量名使用了Python内置函数名
next,会覆盖内置功能,属于不规范写法。 - 导入了
math模块但未使用,素数判断只需遍历到目标数的平方根即可,能大幅提升执行效率。 - 仅查找输入值后200个范围内的数,极端情况下会遗漏正确结果。
修正后的可运行代码
优化效率版本
import math def nextprime(n): if n < 0: raise ValueError("请输入非负整数") # 从n+1开始逐个检查,无范围限制 current = n + 1 while True: if current > 1: is_prime = True # 只需要遍历到current的平方根即可完成素数判断 for i in range(2, int(math.sqrt(current)) + 1): if current % i == 0: is_prime = False break if is_prime: return current current += 1 num = int(input("Enter a positive number:")) print(nextprime(num))
最小改动版本(保留原代码结构仅调整缩进)
num = int(input("Enter a positive number:")) import math def nextprime(n): if n < 0: raise ValueError for current_num in range(n + 1, n +200): if current_num > 1: for i in range(2, current_num): if (current_num % i) == 0: break # else和内层for对齐,只有for循环正常结束(未被break中断)才执行,代表当前数是素数 else: return current_num
测试效果
输入32时,两个版本都会正确返回37。
内容的提问来源于stack exchange,提问作者PoohSan
相关产品推荐
相关产品推荐

