为什么这段打印1000-10000间质数的Python代码无法正常运行?
问题分析与修正方案
你的代码逻辑核心错误是对质数的定义理解不完整:质数是大于1的自然数,且除了1和它自身外,无法被其他任何自然数整除。你只判断了数不能被2整除(即排除偶数),但像9、15、21这类奇数,它们能被3、5等其他数整除,显然不是质数,你的代码会错误地把这些数也打印出来。
你当前的代码实际功能是打印1000到10000之间的所有奇数,而非质数:
for i in range(1000, 10000): if (i % 2) != 0: print(i)
修正后的代码示例
import math for i in range(1000, 10000): # 偶数直接跳过(范围从1000开始,无需考虑2这个质数) if i % 2 == 0: continue # 默认当前数是质数 is_prime = True # 检查从3到√i的所有奇数(偶数已排除,无需重复检查) for j in range(3, int(math.sqrt(i)) + 1, 2): if i % j == 0: is_prime = False break # 确认是质数后打印 if is_prime: print(i)
代码说明
- 先通过
i % 2 == 0跳过所有偶数,减少后续计算量 - 利用数学优化:如果一个数
i有因数,那必然存在一个不大于√i的因数,因此只需检查到√i即可,不用遍历到i-1 - 遍历检查时只看奇数,因为偶数已经被排除,进一步提升效率
内容的提问来源于stack exchange,提问作者Java_Assembly55
相关产品推荐
相关产品推荐

