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

Python 3.10素数生成程序异常:非素数被误加入列表

问题分析

你的代码逻辑存在核心错误:当发现当前i是合数时,你仅递增i并跳过当前素数的检查循环迭代,而非重新开始对新i的完整素数校验。比如当i=15被3整除后,i变为16,但后续只会检查16是否能被5、7等素数整除,完全跳过了对2的检查,导致16这种明显的合数被误加入素数列表。

修正代码
i = 3 
primes = [2] 
while len(primes) < 25:
    is_prime = True
    for p in primes:
        # 优化:如果p的平方大于i,就不需要继续检查了(素数性质)
        if p * p > i:
            break
        if i % p == 0:
            is_prime = False
            break
    if is_prime:
        primes.append(i)
        i += 1
    else:
        i += 1

print(primes)
代码说明
  1. 标志位判断素数:新增is_prime变量标记当前i是否为素数,初始设为True。
  2. 完整校验逻辑:遍历所有已知素数,若i能被任意素数整除,立即标记为非素数并跳出循环,避免无效检查。
  3. 性能优化:当素数p的平方大于i时,可直接终止检查——因为若i有大于其平方根的因数,必然对应一个小于其平方根的因数,而这个因数已经被检查过了。
  4. 正确的迭代逻辑:只有当i被确认是素数时才加入列表,否则仅递增i重新校验。

运行修正后的代码,将得到你期望的前25个素数列表:

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 07:18:12