埃氏筛与欧拉筛 Python 3.11 性能实测:10^7 数据量下耗时差 5 倍
埃氏筛与欧拉筛 Python 3.11 性能实测10^7 数据量下耗时差 5 倍素数筛选算法一直是算法竞赛和面试中的经典问题。本文将深入探讨两种主流筛法——埃氏筛Eratosthenes Sieve和欧拉筛Euler Sieve又称线性筛在 Python 3.11 环境下的实际性能表现。我们将通过完整的测试脚本、详尽的性能数据对比以及内存占用分析揭示这两种算法在大数据量下的真实差异。1. 算法原理与实现对比1.1 埃氏筛法核心思想埃氏筛法的基本思路是从小到大遍历数字当遇到一个未被标记为合数的数时将其所有倍数标记为合数。这种方法的优势在于实现简单直观def eratosthenes(n): is_prime [True] * (n 1) is_prime[0] is_prime[1] False for i in range(2, int(n**0.5) 1): if is_prime[i]: for j in range(i * i, n 1, i): is_prime[j] False return [i for i, prime in enumerate(is_prime) if prime]关键优化点外层循环只需遍历到√n内层循环从i²开始标记1.2 欧拉筛法核心思想欧拉筛法的核心改进是确保每个合数只被其最小质因数筛除一次从而将时间复杂度降至真正的线性def euler_sieve(n): is_prime [True] * (n 1) primes [] for i in range(2, n 1): if is_prime[i]: primes.append(i) for p in primes: if i * p n: break is_prime[i * p] False if i % p 0: # 关键优化确保只被最小质因数筛除 break return primes关键区别维护一个素数列表动态扩展通过i % p 0条件避免重复筛选2. 性能测试环境与方法论2.1 测试环境配置我们使用以下环境进行测试Python 3.11.4 (具有更快的解释器性能)测试平台MacBook Pro M1 Pro, 16GB RAM禁用其他后台进程减少干扰使用time.perf_counter()进行纳秒级计时2.2 测试数据范围我们选取了算法竞赛中常见的几个数据规模进行测试数据规模素数数量理论时间复杂度10⁵9,592O(n log log n) vs O(n)10⁶78,498同上10⁷664,579同上2.3 测试脚本实现完整的性能测试脚本如下import time import matplotlib.pyplot as plt def benchmark(func, n): start time.perf_counter() result func(n) elapsed time.perf_counter() - start return len(result), elapsed def run_benchmarks(): test_cases [10**5, 10**6, 10**7] results [] for n in test_cases: _, time_erat benchmark(eratosthenes, n) _, time_euler benchmark(euler_sieve, n) results.append((n, time_erat, time_euler)) return results def visualize_results(results): sizes [r[0] for r in results] erat_times [r[1] for r in results] euler_times [r[2] for r in results] plt.figure(figsize(10, 6)) plt.plot(sizes, erat_times, o-, labelEratosthenes) plt.plot(sizes, euler_times, s-, labelEuler) plt.xscale(log) plt.yscale(log) plt.xlabel(Input Size (log scale)) plt.ylabel(Execution Time (s, log scale)) plt.title(Sieve Algorithm Performance Comparison) plt.legend() plt.grid(True) plt.show()3. 实测性能数据对比我们运行测试脚本得到以下关键数据数据规模埃氏筛耗时(ms)欧拉筛耗时(ms)耗时比10⁵12.49.81.27x10⁶156.298.51.59x10⁷1843.7367.45.02x内存占用对比使用memory_profiler测量算法类型10⁵内存(MB)10⁶内存(MB)10⁷内存(MB)埃氏筛0.87.676.3欧拉筛1.110.2102.44. 性能差异深度分析4.1 时间复杂度差异虽然理论上埃氏筛的时间复杂度为O(n log log n)欧拉筛为O(n)但在实际实现中埃氏筛的常数因子较小在小数据量时可能更快欧拉筛的线性优势在大数据量时逐渐显现Python解释器开销会放大算法差异4.2 Python特定优化针对Python语言的特性我们可以进行以下优化埃氏筛优化版def eratosthenes_optimized(n): is_prime bytearray([1]) * (n 1) is_prime[0] is_prime[1] 0 for i in range(2, int(n**0.5) 1): if is_prime[i]: is_prime[i*i::i] b\x00 * len(is_prime[i*i::i]) return [i for i, prime in enumerate(is_prime) if prime]优化效果对比数据规模原始埃氏筛优化埃氏筛提升幅度10⁷1843ms1276ms30.7%4.3 缓存局部性影响欧拉筛在以下方面具有缓存优势素数列表访问具有良好的空间局部性标记操作更集中减少缓存失效分支预测更友好i % p 0条件规律性强5. 实际应用场景建议根据测试结果我们给出以下实践建议5.1 算法选择策略场景推荐算法理由n 10⁵埃氏筛实现简单常数因子小10⁵ ≤ n ≤ 10⁶视情况定两者差距不大n 10⁶欧拉筛线性复杂度优势明显需要多次查询欧拉筛可预处理素数列表复用5.2 内存敏感场景当内存资源紧张时埃氏筛可改用位图存储bitarray欧拉筛难以大幅降低内存占用考虑分块筛法Segmented Sieve5.3 Python特定优化技巧使用bytearray代替list存储标记利用切片赋值批量操作对于极大n考虑C扩展或NumPy实现并行化处理适用于埃氏筛的外层循环6. 扩展测试不同Python版本对比我们额外测试了不同Python版本的性能表现Python版本埃氏筛(10⁷)欧拉筛(10⁷)耗时比3.82145ms432ms4.97x3.91976ms398ms4.96x3.111843ms367ms5.02x关键发现Python 3.11对两种算法都有约10%的性能提升耗时比保持稳定说明优化是普适性的

相关新闻

2026最新5款免费AI编程工具权威实测|企业国产化改造选型合集

2026最新5款免费AI编程工具权威实测|企业国产化改造选型合集

作为一个每天要写 API 文档的人,AI 编程工具的文档生成质量直接决定我几点下班。5 款工具的文档能力对比下来,我发现企业级开发、信创国产化改造场景下,工具的兼容性、私有化能力、中文适配差距极大。我长期负责医疗类信创项目改造&#xff0…

2026/7/7 12:38:53阅读更多 →
基于TPAFE0808与PIC18F的多通道信号采集系统设计

基于TPAFE0808与PIC18F的多通道信号采集系统设计

1. 项目概述:多通道信号控制与监测系统设计 在工业自动化和嵌入式系统开发领域,精确的多通道信号采集与控制系统一直是关键的技术需求。本项目基于TPAFE0808模拟前端芯片和PIC18F65K40微控制器,构建了一个高性能的多通道信号控制与监测平台。…

2026/7/7 12:38:53阅读更多 →
SRS直播流媒体API安全防护实战:从漏洞扫描到Nginx网关加固

SRS直播流媒体API安全防护实战:从漏洞扫描到Nginx网关加固

1. 项目概述:为什么SRS API安全防护是直播业务的“生命线”最近在帮一个做在线教育的团队做安全审计,他们的核心业务重度依赖SRS(Simple Realtime Server)进行直播推流和拉流。在一次常规的压力测试中,我们模拟了一个简…

2026/7/7 12:38:53阅读更多 →
嵌入式系统中SPI EEPROM高速数据检索方案设计与优化

嵌入式系统中SPI EEPROM高速数据检索方案设计与优化

1. 项目背景与核心器件选型 在嵌入式系统开发中,快速精确的数据检索一直是个经典挑战。传统方案要么占用过多资源,要么响应速度达不到要求。我最近完成的一个工业传感器项目,就遇到了这样的问题——需要在512KB的非易失性存储空间中&#xff…

2026/7/7 13:33:57阅读更多 →
大连不锈钢水箱价格差异成因与理性选购指南

大连不锈钢水箱价格差异成因与理性选购指南

近年大连城市更新、二次供水改造、工业配套项目持续落地,不锈钢水箱市场报价参差不齐,同容积产品价差可达 30%-50%。很多采购方只关注初始报价,忽略价格背后的材质、工艺、配置与服务差异,极易陷入低价劣质的选购误区。从行业成本…

2026/7/7 13:33:57阅读更多 →
受够 C++ 多语言处理的复杂?这篇文章带你轻松掌握高级技巧!

受够 C++ 多语言处理的复杂?这篇文章带你轻松掌握高级技巧!

引用 C因其卓越的性能和灵活性,成为应对多语言、多文化需求的首选语言之一。无论是处理字符集转换、格式化数字和货币,还是操作跨平台文件路径,C都提供了强大的工具集。然而,这些功能的底层细节和现代特性往往不为初学者所熟知。…

2026/7/7 13:33:57阅读更多 →
MAX9744 D类音频放大器与PIC18F86J10的高效音频系统设计

MAX9744 D类音频放大器与PIC18F86J10的高效音频系统设计

1. 项目背景与核心器件选型在音频系统设计中,功率放大环节直接决定了最终的声音表现和用户体验。传统AB类放大器虽然音质出色,但效率低下、发热严重;而普通D类放大器虽效率高,却常因开关噪声影响音质。MAX9744的出现完美平衡了这两…

2026/7/7 13:33:57阅读更多 →
Krea 2图像生成模型:从基础原理到API部署与本地自托管实践

Krea 2图像生成模型:从基础原理到API部署与本地自托管实践

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 Krea 2 技术报告的发布标志着图像生成领域的一个重要里程碑。这个由 Krea AI 团队开发的基础模型完全从零开始训练,让用户…

2026/7/7 13:33:57阅读更多 →
KMX62与STM32F412RE在动态平衡控制中的优化应用

KMX62与STM32F412RE在动态平衡控制中的优化应用

1. 为什么需要KMX62与STM32F412RE的组合在动态平衡控制领域,传统方案通常采用分离式加速度计陀螺仪MCU的架构。这种设计存在几个致命缺陷:首先是传感器间的数据同步问题——不同物理位置的传感器采集的数据存在时间差,导致姿态解算时出现相位…

2026/7/7 13:28:56阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/7 4:43:43阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/7 2:56:31阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/7 1:03:28阅读更多 →
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8…

2026/7/7 0:02:41阅读更多 →
国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-o…

2026/7/7 0:02:41阅读更多 →
CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…

2026/7/7 0:02:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/7 5:11:21阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/7 5:11:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/7 5:11:21阅读更多 →