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

使用筛法生成不超过n的素数时报bool对象不可下标错误如何解决?

错误原因

你遇到的TypeError: 'bool' object is not subscriptable错误核心原因是内层筛除逻辑的赋值操作错误:

  • 内层for j循环中的代码is_prime = False直接把原本是布尔列表的is_prime变量整体覆盖成了单个布尔值False
  • 第一次执行完这行赋值后,is_prime就不再是列表,下一轮外层循环执行if is_prime[i]尝试对布尔值做下标取值,直接触发类型错误。

修复方案

只需要把内层循环的赋值逻辑修改为仅修改is_prime列表对应下标的值即可,你原本的筛法起始位置计算逻辑是正确的,不需要调整。

修复后的完整代码:

def generate_primes(n):
    if n < 2:
        return []
    size = (n - 3) // 2 + 1
    primes = [2]
    is_prime = [True] * size

    for i in range(size):
        if is_prime[i]:
            p = i * 2 + 3
            primes.append(p)

            # 筛除当前素数p的倍数
            for j in range(2 * i ** 2 + 6 * i + 3, size, p):
                is_prime[j] = False
    return primes

print(generate_primes(100))

运行代码可正确输出100以内的所有素数。

内容的提问来源于stack exchange,提问作者Patrick_Chong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:54:04