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

欧拉筛选法求质数的算法解析

正常的埃氏筛选法是定义一个bool型的数组,把所有数组的元素初始化为1.表示初始阶段所有数都是质数。开始对数组进行筛选,把所有含有2和2的倍数的所有数筛选掉。在把所有含有3和3的倍数的所有数筛选掉,再把含有5和5的倍数的所有数筛选掉.一直筛选到只剩下素数为止。

#include <bits/stdc++.h> using namespace std; bool f[10001]; // 标记数组,f[i] = true 表示 i 是素数 // 埃氏筛法函数,筛选出 1 到 n 之间的素数 void primer(int n) { memset(f, true, sizeof(f)); // 初始假设所有数都是素数 f[1] = false; // 1 不是素数 int x = sqrt(n); // 只需要筛到 sqrt(n) 即可 for (int i = 2; i <= x; i++) { if (f[i]) { // 如果 i 是素数 // 标记 i 的所有倍数为非素数 for (int j = 2; j <= n / i; j++) { f[i * j] = false; } } } } int main() { int a, b, sum = 0; cin >> a >> b; // 输入区间 [a, b] primer(b); // 筛选出 1 到 b 之间的素数 for (int i = a; i <= b; i++) { if (f[i]) { sum++; // 统计区间内素数个数 } } cout << sum << endl; // 输出结果 return 0; }

其中欧拉筛选法是在埃氏筛选法基础上,让每一个合数,之被他的最小质因数筛选一次。以达到不重复的目的。对于一个合数的分解:将其分解为他的最小质因子与一个其他数的乘积。

欧拉筛法的判断:如果i是质数,那么就将它与之前的质数(包括它本身)的乘积筛掉 。 如果i是合数,那么就将它与从2到它最小的质因子之间的质数的乘积分别筛掉。

#include <bits/stdc++.h> using namespace std; const int MAXN = 1e8 + 5; bool f[MAXN]; // f[i] = true 表示 i 是素数 int a[MAXN]; // 存素数 int sum = 0; // 素数个数 int n; int main() { cin >> n; // 初始化 f 为 true(除了 0 和 1) for (int i = 2; i <= n; i++) f[i] = true; for (int i = 2; i <= n; i++) { if (f[i]) { a[++sum] = i; // 记录素数 } for (int j = 1; j <= sum && i * a[j] <= n; j++) { f[i * a[j]] = false; if (i % a[j] == 0) break; // 保证每个合数只被标记一次 } } cout << sum << endl; return 0; }

对于a[++sum] = i;这行代码的含义是从1开始记录每一个素数的值。不重复

http://www.cnnetsun.cn/news/35105.html

相关文章:

  • 15、探索 Red Hat Linux 的实用功能与娱乐体验
  • 基于Simulink仿真的电动汽车模型构建与参数初始化研究
  • JavaScript数组push方法:小白也能懂的入门指南
  • IsaacLab机器人仿真系统实战配置指南:从零到专业部署
  • WeekToDo终极指南:如何快速搭建免费的周计划待办事项应用
  • 25、计算机硬件与Linux文件系统全解析
  • 28、Red Hat Linux 9:软件管理、系统配置与网络安全指南
  • AI如何帮你轻松实现Python包的本地开发模式
  • AI如何帮你快速掌握Netty框架的核心功能
  • Protobuf零基础入门:用快马平台10分钟完成第一个.proto文件
  • 基于SpringBoot的旧物回收商城系统的设计与实现计算机毕业设计项目源码文档
  • python测试1
  • Cloudpods多云管理平台:从零构建企业级混合云解决方案
  • OpenNMS快速入门指南:10分钟掌握开源网络管理核心技术
  • 比传统方法快10倍:并行化蚁群算法的性能突破
  • 游戏引擎里的世界管家
  • 电商网站中的Moment.js实战:倒计时与促销时间处理
  • 揭秘z命令数据引擎:智能优化你的终端导航体验
  • uni-popup在电商APP中的5个实用场景
  • 如何用AI自动生成Moment.js日期处理代码
  • 对比测试:MCP工具VS传统开发效率提升300%?
  • Code Llama-7b-hf 终极指南:从零开始掌握AI编程助手 [特殊字符]
  • 掌握色彩管理:3种创新方案解决跨设备视觉差异
  • 企业IT实战:用快马批量部署Win11精简系统
  • Hugging Face数据集查看器:5分钟掌握数据探索的终极利器
  • FastDFS日志管理终极指南:从配置到自动化运维
  • cx_Freeze使用指南:Python应用打包利器
  • 如何监控ComfyUI的GPU资源占用情况?
  • 量化金融面试终极攻略:免费获取完整实用指南,快速提升求职成功率
  • ExoPlayer在短视频APP中的实战优化技巧