C++如何判断素数_C++质数判断算法代码优化


判断素数的基础方法是试除法,从2到√n逐一试除,若存在整除则非素数;优化时只需检查2和奇数,进一步可用埃氏筛预处理提升多查询效率。

c++如何判断素数_c++质数判断算法代码优化

判断一个数是否为素数(质数)是C++编程中的常见问题。基础思路简单,但随着数值增大,算法效率差异明显。下面从基础实现出发,逐步优化,提升运行效率。

基础方法:试除法

最直接的方法是从2开始,尝试用小于n的所有数去除n,若存在能整除的数,则n不是素数。

bool isPrime(int n) {
   if (n    if (n == 2) return true;
   if (n % 2 == 0) return false;
   for (int i = 3; i       if (n % i == 0)
         return false;
   }
   return true;
}

这种方法逻辑清晰,但当n较大时,循环次数太多,效率低下。

优化1:只检查到√n

如果n能被大于√n的数整除,那么必然有一个小于√n的对应因子。因此只需检查从2到√n之间的数。

立即学习“C++免费学习笔记(深入)”;

bool isPrime(int n) {
   if (n    if (n == 2) return true;
   if (n % 2 == 0) return false;
   for (int i = 3; i * i       if (n % i == 0)
         return false;
   }
   return true;
}

这里跳过偶数(除了2),只检查奇数,将循环次数减少近一半。i * i

ListenLeap ListenLeap

AI辅助通过播客学英语

ListenLeap 217 查看详情 ListenLeap

优化2:预处理小素数 + 6k±1优化

除2和3外,所有素数都可以表示为6k±1的形式。利用这一点,可以进一步减少判断次数。

bool isPrime(int n) {
   if (n    if (n == 2 || n == 3) return true;
   if (n % 2 == 0 || n % 3 == 0) return false;
   for (int i = 5; i * i       if (n % i == 0 || n % (i + 2) == 0)
         return false;
   }
   return true;
}

该方法先排除能被2或3整除的数,然后从5开始,每次检查i和i+2(即6k-1和6k+1),步长为6。在大数判断中性能显著提升。

批量判断:埃拉托斯特尼筛法

如果需要判断多个数是否为素数,特别是范围连续的情况,使用筛法更高效。

#include
std::vector sieve(int n) {
   std::vector isPrime(n + 1, true);
   isPrime[0] = isPrime[1] = false;
   for (int i = 2; i * i       if (isPrime[i]) {
         for (int j = i * i; j             isPrime[j] = false;
      }
   }
   return isPrime;
}

筛法预先标记合数,适合处理大量查询。时间复杂度O(n log log n),空间换时间。

基本上就这些。单次判断用6k±1优化,多次判断优先考虑筛法。关键在于根据场景选择合适方法,避免无谓计算。

以上就是C++如何判断素数_C++质数判断算法代码优化的详细内容,更多请关注其它相关文章!


# 常见问题  # 多个  # 太多  # 单元测试  # 合数  # 结构化  # 如何使用  # 尼克  # 如何判断  # 只需  # c++编程  # 质数  # c++  # 绑定  # 刷关键词排名 现问宙l思首推  # 视频网站代码优化方法  # seo人员工资多高  # 茂名网站建设制作公司  # 钢材销售网站建设  # 唐山网站推广共同合作  # 怎么推广网站到国外  # 企业网站建设方案模板  # 甘肃seo服务平台  # 媒体网站优化范围是什么 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Vue 3中独立响应式实例的创建与应用  《杖剑传说》食谱大全  手机远程连接电脑方法  喜茶GO更换登录账号方法  J*aScript二进制处理_ArrayBuffer与Blob  如何解决Casbin日志与应用日志不统一的问题,使用casbin/psr3-bridge实现无缝集成  iQOO手机信号差网络不稳定怎么办 信号问题原因排查与增强设置【攻略】  不吃碳水化合物是健康减肥的好办法吗  微信客户端如何找回密码_微信客户端忘记密码找回方法  《荔枝fm》导出文件教程  Word 2003字体大小设置方法  告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名  抖音商城官网是什么_抖音商城官方网址与访问方法  Sublime Text怎么关闭自动完成_Sublime禁用Auto Complete设置  优化Leaflet弹出层图片显示:条件渲染策略  C++中std::thread和std::async的区别_C++并发编程与线程与异步任务比较  《美篇》取消会员自动续费方法  《下一站江湖2》风神腿获取攻略  我的世界官方网址入口 我的世界游戏主页直达入口  Bootstrap 5导航栏折叠功能失效:数据属性迁移指南  Mac如何开启画中画模式_Mac Safari浏览器视频画中画功能  Win10如何关闭操作中心通知 Win10免打扰设置全攻略【清爽】  如何使用 Optional 类型并满足 Pylint 的类型检查  sublime如何配置PHP开发环境_在sublime中运行与调试PHP代码  谷歌浏览器官网地址整理_谷歌浏览器新版直连2026稳定访问  VBA Outlook邮件自动化:高效集成Excel数据与列标题的策略  发博客与长微博技巧  以下哪一个是适应长期护理制度发展而设立的新职业  微信注销后银行卡解绑了吗_微信注销后银行卡解绑状态  邦丰播放器频道搜索设置  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  b站怎么查看视频的码率_b站视频码率查看方法  CDR如何复制交互式填充色  腾讯QQ邮箱官方入口 QQ邮箱网页版登录平台  如何在mysql中设计餐饮点餐系统_mysql点餐系统项目实战  C++ bind函数使用教程_C++参数绑定与函数适配器的应用  Dagster资产间数据传递与用户配置管理教程  哔哩哔哩黑名单怎么查看  Go Goroutine调度与并发执行深度解析  聚水潭ERP后台管理系统登录 聚水潭ERP官方登录通道  解决Pandas DataFrame高度碎片化警告:高效创建多列的策略  使用Python和NLTK从文本中高效提取名词的实用教程  Excel如何设置动态下拉菜单_Excel表格下拉选项快速方法  鸣潮历史学家灯塔位置一览  驱动人生:游戏修复指南  学习通网页版个人登录_学习通网页版个人账户登录入口  win11如何开启单声道音频 Win11为听障用户合并左右声道【辅助】  《偃武》甘宁技能详解  J*aScript调试技巧_性能分析与内存快照  动漫之家观看全集库 动漫之家免费资源网地址 

 2025-12-17

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.