如何优化判断非质数的Python代码?当前代码质数判断正常但非质数时卡顿
修复质数判断代码的卡顿问题
你的代码处理非质数时卡顿的核心原因是找到因数后用了continue,导致循环变量a无法递增,直接陷入无限循环。比如测试i=4时,a=2会触发4%2==0,执行factors.append(a)后直接continue,a始终停在2,循环永远不会结束。另外原代码的质数判断逻辑也存在漏洞,只是可能你测试的场景刚好没暴露出来。
优化后的代码
i = int(input("Enter a number: ")) if i <= 1: print(f"The given number {i} is not a prime number") elif i == 2: print(f"The given number {i} is a prime number") else: is_prime = True # 只遍历到i的平方根即可,减少循环次数 for a in range(2, int(i**0.5) + 1): if i % a == 0: is_prime = False break print(f"The given number {i} is a prime number" if is_prime else f"The given number {i} is not a prime number")
关键修复点
- 删掉了会导致死循环的
continue逻辑,找到因数后直接标记非质数并跳出循环 - 优化遍历范围:只需要检查到
i的平方根,因为如果i存在大于平方根的因数,必然对应一个更小的因数,这能大幅减少循环次数,提升效率 - 补充了边界值处理(比如
i<=1、i=2的情况),覆盖所有可能的输入场景
原代码的其他问题
- 逻辑冗余:用
factors列表判断质数的方式复杂且容易出错,直接用布尔变量标记状态更简洁可靠 - 效率低下:原代码遍历到
i本身,对于大数来说完全是不必要的性能浪费
内容的提问来源于stack exchange,提问作者user19409398
相关产品推荐
相关产品推荐

