如何查找指定区间内的素数并逐行打印?100-200区间素数遍历的break使用问题求助
代码问题定位与修正
break的使用逻辑本身没有问题,它的作用就是在检测到i % c == 0时,立刻终止当前针对数字i的内层校验循环,直接跳转至外层循环处理下一个数字,完全匹配你想要的“找到可整除关系就停止当前数校验”的需求。之前代码输出结果不符合预期,是两个核心逻辑漏洞导致的:
- 标记位状态残留:
prime变量定义在循环外部,上一轮数字的判断结果会残留到下一轮校验流程中,比如上一个数判定为素数后prime = True的状态会被带入下一个偶数的判断中,最终输出错误结果。 - 标记位赋值时机错误:把
prime = True放在了和if i % c ==0配对的else分支里,只要当前遍历到的c值暂时不能整除i,就会立刻把素数标记设为True,完全没有等待所有可能的除数校验完成,会把大量非素数误判为素数。
修正后的可运行代码
for i in range(100, 201): # 每个数字校验前重置标记位,默认假设当前数字是素数 is_prime = True # 性能优化:只需遍历到i的平方根即可完成素数校验,减少无意义循环 for c in range(2, int(i**0.5) + 1): if i % c == 0: # 找到可整除的除数:标记为非素数,break立刻终止当前校验 is_prime = False break # 整轮校验走完未触发break,说明当前数字是素数,逐行打印 if is_prime: print(i)
运行效果说明
上述代码运行后,会逐行输出100到200区间内的所有素数,校验过程中只要检测到某个数字存在除1和自身外的因数,就会立刻停止对这个数字的冗余判断,直接跳转至下一个数字的校验流程。
内容的提问来源于stack exchange,提问作者Parvesh D. Singh
相关产品推荐
相关产品推荐

