You need to enable JavaScript to run this app. 如何用Python统计指定区间素数总数并将所有素数统一存入同一列表
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python统计指定区间素数总数并将所有素数统一存入同一列表

现有代码的问题
  • 素数判断的核心逻辑没有问题,核心错误出在列表初始化的位置:numlist = []写在了素数判断成功的分支内部,每识别到一个素数就会新建一个空列表,再把当前素数加入列表后打印,因此最终输出的是多个独立的单元素列表,不符合统一存储所有素数的预期。
基础修正方案

只需要把存储素数的空列表初始化步骤移到外层遍历循环的外部,让所有素数都追加到同一个列表实例中,最后统一打印列表即可;同时可以直接通过列表长度获取区间内素数的总数量,不需要单独计数。
修正后的代码:

lower = int(input("Enter the begining of the range: "))
upper = int(input("Enter the end of the range: "))
print("Prime numbers between", lower, "and", upper, "are:")

# 提前初始化统一的素数存储列表,放在循环外部
prime_list = []
for num in range(lower, upper + 1):
   if num > 1:
       for i in range(2, num):
           if (num % i) == 0:
               break
       else:
           prime_list.append(num)

# 统一打印全量素数列表
print(prime_list)
# 直接取列表长度得到素数总数
print(f"{lower}~{upper}区间内共有{len(prime_list)}个素数")

输入起始值1、结束值10时,修正后的代码运行输出为:

Prime numbers between 1 and 10 are:
[2, 3, 5, 7]
1~10区间内共有4个素数
性能优化方案

原有素数判断逻辑存在冗余循环,可以从两个方向优化:

  • 因数判断范围压缩:如果一个数存在大于自身平方根的因数,必然存在一个小于自身平方根的对应因数,因此不需要遍历到num-1,仅需遍历到目标数的平方根即可,可大幅减少循环次数,在大区间下性能提升明显。
  • 无效判断过滤:大于2的偶数一定不是素数,可以直接跳过,减少一半的判断量。

优化后的代码示例:

import math

lower = int(input("Enter the begining of the range: "))
upper = int(input("Enter the end of the range: "))
print("Prime numbers between", lower, "and", upper, "are:")

prime_list = []
# 单独处理唯一的偶素数2
if lower <= 2 <= upper:
    prime_list.append(2)

# 从奇数起始值开始遍历,步长为2,跳过所有偶数
start_num = max(3, lower if lower % 2 == 1 else lower + 1)
for num in range(start_num, upper + 1, 2):
    # 因数判断仅遍历到num的平方根,且同样只判断奇数因数
    for i in range(3, int(math.sqrt(num)) + 1, 2):
        if num % i == 0:
            break
    else:
        prime_list.append(num)

print(prime_list)
print(f"{lower}~{upper}区间内共有{len(prime_list)}个素数")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 21:15:04