You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么这段打印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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:30:58