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

如何修正无法识别2和3为质数的≤N质数统计Python程序?

修复方案

原代码存在两个关键问题:

  • 当i为2或3时,内层循环的range(2, int(i/2)+1)生成的是空区间(比如i=2时,int(2/2)=1,range(2,2)没有元素),循环根本不会执行,所以这两个数永远不会被加入质数列表
  • 内层循环的逻辑完全错误:只要找到一个j不能整除i就把i加入列表,这会导致合数被多次添加,同时漏掉真正的质数判断逻辑

修复后的代码如下:

N = int(input("Enter number: "))
count = 0
primes = []
for i in range(2, N+1):
    is_prime = True  # 先假设当前数是质数
    # 优化:判断到sqrt(i)就够了,比i/2效率更高
    for j in range(2, int(i**0.5) + 1):
        if i % j == 0:  # 如果能被整除,说明不是质数
            is_prime = False
            break  # 提前退出循环,没必要继续判断
    if is_prime:  # 确认是质数后再添加
        primes.append(i)
        count += 1

print(count)
print(primes)

关键修复点说明

  • 新增is_prime标记,先假设每个数是质数,再通过内层循环验证
  • 内层循环范围优化到int(i**0.5)+1,因为如果i有大于sqrt(i)的因数,那对应的另一个因数必然小于sqrt(i),这样能减少循环次数,提升效率
  • 当发现i能被j整除时,立即标记为非质数并跳出循环,避免不必要的计算
  • 循环结束后统一判断is_prime的状态,符合质数的定义:大于1的自然数,除了1和自身外没有其他因数

内容的提问来源于stack exchange,提问作者Albert van Zyl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:12:40