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

如何扩展Python循环中用作范围的数组?质数程序问题求助

解决100以内质数查找程序的问题

首先你的代码存在几个核心逻辑错误,同时也有你提到的循环范围固定的问题,下面一步步修正:

1. 修正基础逻辑错误

  • 初始值错误:1不是质数,primes应该从[2]开始(2是最小的质数)
  • 第二层循环的无效跳过:你写了if j != 0: continue,导致第二层循环永远只执行j=0的情况,根本没遍历已发现的质数来判断整除性
  • 判断条件矛盾:前面已经跳过了j≠0的情况,后面的if j != 0 and ...永远不会触发,自然不会往primes里加新元素

2. 解决循环范围固定的问题

你提到的range(len(primes))会固定初始长度的问题,根本不需要用numpy,直接遍历primes列表本身,或者用while循环动态检查即可。另外判断质数时可以做个优化:只需要检查到该数的平方根(如果i有大于sqrt(i)的因数,对应的另一个因数必然小于sqrt(i)),能大幅减少循环次数。

修正后的代码

def Primeadder():
    primes = [2]  # 初始质数从2开始
    for i in range(3, 100):  # 从3遍历到99
        is_prime = True
        # 遍历已发现的质数,检查是否能整除i
        for p in primes:
            # 优化:当前质数平方大于i时,无需继续检查
            if p * p > i:
                break
            if i % p == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(i)
    print(primes)

Primeadder()

代码说明

  • 初始primes设为[2],符合质数定义
  • 外层循环从3开始,因为2已经在列表里了
  • 内层循环直接遍历primes中的每个质数,不需要依赖索引,自然避开了range长度固定的问题
  • 平方根优化减少了不必要的循环,提升了效率

如果一定要用索引方式解决range长度固定的问题,可以把内层循环改成while循环:

def Primeadder():
    primes = [2]
    for i in range(3, 100):
        is_prime = True
        j = 0
        while j < len(primes):
            p = primes[j]
            if p * p > i:
                break
            if i % p == 0:
                is_prime = False
                break
            j += 1
        if is_prime:
            primes.append(i)
    print(primes)

这里用while j < len(primes)动态判断循环条件,就能随着primes长度变化调整循环次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:15:11