当前位置: 首页 > article >正文

从LeetCode实战出发:欧拉筛 vs 埃氏筛,在计数质数问题里到底该用哪个?

从LeetCode实战出发欧拉筛 vs 埃氏筛在计数质数问题里到底该用哪个刷LeetCode时遇到204.计数质数这类题目很多开发者会纠结于选择埃拉托斯特尼筛法埃氏筛还是欧拉筛。这两种算法在理论时间复杂度上的差异显而易见但在实际编码面试和竞赛中选择哪种筛法往往需要考虑更多现实因素——比如题目给定的数据规模、时间限制、内存限制等。本文将结合LeetCode平台的实际约束深入分析两种筛法在不同场景下的表现差异并给出具体的选型建议。1. 算法核心原理与实现对比1.1 埃氏筛简单但存在冗余埃氏筛的基本思想是从2开始将每个质数的倍数都标记为合数。它的实现非常直观def countPrimes_eratosthenes(n): if n 2: return 0 is_prime [True] * n 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, i): is_prime[j] False return sum(is_prime)关键优化点外层循环只需遍历到√n内层循环从i²开始标记注意虽然理论时间复杂度是O(n log log n)但在实际实现中由于计算机缓存访问模式等因素性能可能比预期更好或更差。1.2 欧拉筛线性时间的精妙设计欧拉筛又称线性筛通过确保每个合数只被其最小质因数筛除达到了O(n)的时间复杂度def countPrimes_euler(n): if n 2: return 0 is_prime [True] * n primes [] for i in range(2, n): 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 len(primes)核心机制if i % p 0: break确保每个合数只被筛一次需要额外O(n)空间存储质数列表2. 性能实测LeetCode环境下的对比为了更直观地比较两种算法我们在LeetCode的测试环境下进行了多组实验使用Python 3数据规模 (n)埃氏筛运行时间(ms)欧拉筛运行时间(ms)内存消耗差异10^54560相近10^6320280欧拉筛多10%10^738002100欧拉筛多15%意外发现在小数据量n≤10^5时埃氏筛反而更快当n≥10^6时欧拉筛的时间优势开始显现内存消耗方面欧拉筛需要额外存储质数列表提示LeetCode对Python的时间限制通常为3-5秒C/Java则更严格。选择算法时需考虑语言特性。3. 算法选择决策树基于上述分析我们可以建立一个简单的决策流程评估问题规模如果n 10^5 → 优先考虑埃氏筛如果n ≥ 10^6 → 优先考虑欧拉筛考虑编程语言Python/Ruby等解释型语言 → 倾向于欧拉筛避免多次循环开销C/Java等编译型语言 → 埃氏筛在小数据量时可能更优检查内存限制如果内存非常紧张 → 埃氏筛更节省空间如果时间限制严格 → 欧拉筛更可靠实际案例LeetCode 204题n≤5×10^6欧拉筛是最佳选择小型编程竞赛n≤10^5埃氏筛代码更简洁高效4. 进阶优化技巧4.1 埃氏筛的优化空间虽然埃氏筛看起来简单但仍有多种优化方式# 优化版埃氏筛跳过偶数 def countPrimes_eratosthenes_opt(n): if n 2: return 0 is_prime [True] * n is_prime[0] is_prime[1] False for i in range(2, int(n ** 0.5) 1): if is_prime[i]: is_prime[i*i : n : i] [False] * len(is_prime[i*i : n : i]) return sum(is_prime)优化效果使用切片赋值替代内层循环Python特有预处理跳过偶数可减少一半工作量4.2 欧拉筛的工程实践欧拉筛在实现时需要注意几个关键点# 工程友好的欧拉筛实现 def countPrimes_euler_robust(n): if n 2: return 0 is_prime [True] * n primes [] for i in range(2, n): if is_prime[i]: primes.append(i) for p in primes: composite i * p if composite n: break is_prime[composite] False if i % p 0: break return len(primes)工程考量提前计算composite避免重复乘法清晰的变量命名增强可读性添加边界检查防止数组越界5. 面试中的策略选择在技术面试中关于质数筛法的问题通常会考察基础实现能力能写出正确的埃氏筛即可达标能实现欧拉筛是加分项复杂度分析准确分析两种算法的时间/空间复杂度理解常数因子对实际性能的影响场景选择根据问题规模合理选择算法能讨论语言特性对算法选择的影响面试技巧先实现埃氏筛再讨论优化空间提到欧拉筛时重点解释i % p 0的关键作用展示对不同约束条件的思考过程在最近的面试实战中有候选人给出了一个有趣的折中方案对于n≤10^6使用埃氏筛否则使用欧拉筛。这种基于实际测试数据的策略往往能体现出工程师的实践思维。

相关文章:

从LeetCode实战出发:欧拉筛 vs 埃氏筛,在计数质数问题里到底该用哪个?

从LeetCode实战出发:欧拉筛 vs 埃氏筛,在计数质数问题里到底该用哪个? 刷LeetCode时遇到"204.计数质数"这类题目,很多开发者会纠结于选择埃拉托斯特尼筛法(埃氏筛)还是欧拉筛。这两种算法在理论时…...

从零到一:用Activiti 7.1.0.M5 + MyBatis-Plus构建一个可运行的请假审批Demo(附完整代码)

从零到一:用Activiti 7.1.0.M5 MyBatis-Plus构建一个可运行的请假审批Demo(附完整代码) 在企业内部管理系统中,请假审批是最常见的业务流程之一。传统的手工审批方式效率低下,而通过工作流引擎实现自动化审批可以显著…...

《事件关系阴阳博弈动力学:识势应势之道》第十一篇:双脑协同——WOLM与大模型的共生智能

原创声明:本文为作者周林东原创学术理论著作《事件关系阴阳博弈动力学:识势应势之道》的博客连载版。本书所述技术方案已提交中国发明专利申请,受相关法律保护。任何形式的商业使用,请与作者联系取得授权。欢迎基于学术目的的引用…...

3步解密QQ音乐加密文件:qmcdump完整使用手册

3步解密QQ音乐加密文件:qmcdump完整使用手册 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump qmcdump是一个专…...

终极免费浏览器资源嗅探工具:猫抓插件完整指南

终极免费浏览器资源嗅探工具:猫抓插件完整指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是一个文章写手,你负责为开…...

Dify 2026模型瘦身术(GPU显存<6GB也能跑满推理吞吐)

更多请点击: https://intelliparadigm.com 第一章:Dify 2026模型轻量化微调方法概览 Dify 2026 版本在模型轻量化微调方面引入了三重协同优化机制:结构剪枝、LoRA-Adapter 动态注入与量化感知训练(QAT)一体化流水线。…...

告别裸奔测试:手把手教你用Zephyr的ztest框架为STM32驱动写单元测试

嵌入式开发实战:用Zephyr ztest框架为STM32驱动构建工业级单元测试 在嵌入式开发领域,硬件驱动代码的质量直接影响产品的稳定性和可靠性。想象一下,当你开发的I2C传感器驱动在量产阶段突然出现偶发性故障,或者SPI通信在极端温度下…...

室外物流全域可视:无感定位 + 数字孪生,实现物流要素全流程无感化监管

2026年,智慧物流进入全域数字化运营新阶段,室外物流场景因范围广、目标杂、环境复杂、动态性强,长期面临监管盲区、定位不准、轨迹断链、虚实脱节等痛点。传统依赖GPS、RFID、车载终端与人工值守的模式,在港口堆场、物流园区、货运…...

利用多模型聚合能力为AIGC应用动态选择最佳模型

利用多模型聚合能力为AIGC应用动态选择最佳模型 1. AIGC应用的多模型需求场景 现代AIGC应用通常需要处理多种类型的生成任务,例如创意故事写作、技术代码生成、营销文案创作等。不同任务对模型能力的要求存在显著差异:创意写作可能需要更强的叙事连贯性…...

UFO3跨设备智能代理编排系统架构与实现

1. 项目背景与核心价值UFO3这个命名本身就很有意思——它既暗示了系统像"不明飞行物"一样神秘高效,又通过数字3表明这是经过多次迭代的成熟方案。作为一套跨设备智能代理编排系统,它要解决的核心痛点是:在物联网设备爆炸式增长的今…...

Docker Cheat Sheet:安全扫描与漏洞修复的终极指南

Docker Cheat Sheet:安全扫描与漏洞修复的终极指南 【免费下载链接】docker-cheat-sheet Docker Cheat Sheet 项目地址: https://gitcode.com/gh_mirrors/do/docker-cheat-sheet Docker 容器技术已成为现代应用开发与部署的核心工具,但安全风险也…...

告别重复造轮子,用快马一键生成智能车高效开发框架

今天想和大家分享一个提升智能车开发效率的实用方法。作为参加过几届智能车比赛的老选手,我深知从零开始搭建框架要耗费大量时间。最近发现InsCode(快马)平台能根据比赛规则智能生成开发框架,试用了下效果很不错。 框架设计思路 针对21届规则&#xff0c…...

10个关键步骤确保NW.js应用无障碍合规性:完整测试指南

10个关键步骤确保NW.js应用无障碍合规性:完整测试指南 【免费下载链接】nw.js Call all Node.js modules directly from DOM/WebWorker and enable a new way of writing applications with all Web technologies. 项目地址: https://gitcode.com/gh_mirrors/nw/n…...

SeeDance 任务 API 集成与使用指南

简介 SeeDance 任务 API 的主要功能是通过输入由 SeeDance 视频生成 API 生成的任务 ID 来查询任务的执行状态。本文将提供详细的集成指导,帮助您轻松集成并充分利用该 API 的强大功能。通过 SeeDance 任务 API,您能够方便地查询 SeeDance 视频生成 API…...

如何使用Colly构建高效电商库存监控系统:从入门到实战

如何使用Colly构建高效电商库存监控系统:从入门到实战 【免费下载链接】colly Elegant Scraper and Crawler Framework for Golang 项目地址: https://gitcode.com/gh_mirrors/co/colly 在电商运营中,实时掌握商品库存状态是提升转化率的关键。Co…...

QT6 QML开发避坑指南:从C++老手到QML新人的5个常见误区与解决方案

QT6 QML开发避坑指南:从C老手到QML新人的5个常见误区与解决方案 1. 数据绑定与属性变更通知的机制理解 许多从C转向QML的开发者常常低估了数据绑定机制的复杂性。在传统Qt Widgets中,我们习惯显式调用update()或repaint()来刷新界面,但在QML中…...

N_m3u8DL-CLI-SimpleG:5分钟告别复杂命令行,轻松下载M3U8视频

N_m3u8DL-CLI-SimpleG:5分钟告别复杂命令行,轻松下载M3U8视频 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 你是否曾经面对密密麻麻的命令行代码感到无所…...

让室内每个人的位置都可实时计算——镜像视界室内人员实时定位方案

让室内每个人的位置都可实时计算——镜像视界室内人员实时定位方案室内空间智能化管控的核心诉求,是实现“可测、可算、可管”,而其中最关键的一环,就是让室内每个人的位置都可实时计算——无需等待、无需追溯,实时输出人员三维坐…...

N_m3u8DL-CLI-SimpleG完整指南:图形化M3U8视频下载终极解决方案

N_m3u8DL-CLI-SimpleG完整指南:图形化M3U8视频下载终极解决方案 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 你是否曾为下载在线视频而头疼?面对复杂的…...

Agent Skill才是AI开发的终极解法:用好属于自己的Skill体系,能不能把团队的经验和能力,沉淀成可复用、可规模化的AI资产

写Prompt写到吐?Agent Skill才是AI开发的终极解法 目录 写Prompt写到吐?Agent Skill才是AI开发的终极解法 为什么Agent Skill突然火了?因为Prompt工程有3个致命天生短板 1. 不可复用:一次性的“咒语”,换场景就失效 2. 不可协同:千人千面,团队标准彻底失控 3. 不可工程化…...

如何配置Local Deep Research的20+研究策略:找到最适合你的工作流程

如何配置Local Deep Research的20研究策略:找到最适合你的工作流程 【免费下载链接】local-deep-research ~95% on SimpleQA (e.g. Qwen3.6-27B on a 3090). Supports all local and cloud LLMs (llama.cpp, Ollama, Google, ...). 10 search engines - arXiv, Pub…...

视频号直播数据抓取工具:wxlivespy让你的直播分析更简单

视频号直播数据抓取工具:wxlivespy让你的直播分析更简单 【免费下载链接】wxlivespy 微信视频号直播间弹幕信息抓取工具 项目地址: https://gitcode.com/gh_mirrors/wx/wxlivespy 你是否曾想过,如果能够实时了解直播间里观众的每一个互动、每一份…...

汉字浏览器项目解析:聚合多源数据与可视化探索实践

1. 项目概述:一个汉字学习者的“浏览器”如果你和我一样,对汉字的结构、演变和背后的文化故事着迷,那你一定经历过这样的时刻:在阅读古籍、研究书法,或者仅仅是学习一个新字时,迫切想知道它的字形源流、历代…...

ObjectDetection-OneStageDet自定义开发指南:如何添加新的骨干网络和检测头

ObjectDetection-OneStageDet自定义开发指南:如何添加新的骨干网络和检测头 【免费下载链接】ObjectDetection-OneStageDet 单阶段通用目标检测器 项目地址: https://gitcode.com/gh_mirrors/ob/ObjectDetection-OneStageDet ObjectDetection-OneStageDet是一…...

突破性中兴光猫管理:三步解锁终极工厂模式与永久Telnet

突破性中兴光猫管理:三步解锁终极工厂模式与永久Telnet 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 中兴光猫设备的管理权限解锁一直是网络管理员和技术爱好者的核心需求…...

天辛大师谈人工智能时代,如何用AI研究古玩界传说中的传国玉玺

在收藏界流转了数百年的“传国玉玺”传说,始终像一枚带着魔力的磁石,牵扯着无数古玩研究者、历史爱好者的心弦——这块用战国和氏璧雕琢而成、方圆四寸、上刻五龙交纽、正面刻着李斯亲手书写的“受命于天,既寿永昌”八个虫鸟篆字的玉玺&#…...

GEPA MCP适配器完全教程:优化模型上下文协议工具使用

GEPA MCP适配器完全教程:优化模型上下文协议工具使用 【免费下载链接】gepa Optimize prompts, code, and more with AI-powered Reflective Text Evolution 项目地址: https://gitcode.com/gh_mirrors/ge/gepa GEPA(GitHub 加速计划)…...

如何彻底解决TranslucentTB开机启动问题:3个专业修复方案

如何彻底解决TranslucentTB开机启动问题:3个专业修复方案 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB TranslucentTB是一款…...

音视频生成技术评测标准VABench解析与应用

1. 项目概述:为什么需要音视频生成评测标准在数字内容创作爆发的时代,音视频生成技术正经历前所未有的发展。从短视频平台的特效滤镜到影视行业的虚拟制片,从语音合成播报到AI数字人直播,各类生成式AI技术已经深度渗透内容生产全流…...

TestProf配置与调优:10个实用技巧提升测试性能

TestProf配置与调优:10个实用技巧提升测试性能 【免费下载链接】test-prof Ruby Tests Profiling Toolbox 项目地址: https://gitcode.com/gh_mirrors/te/test-prof TestProf是一款强大的Ruby测试性能分析工具集,它提供了多种分析器和优化方案&am…...