news 2026/5/26 6:15:49

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
欧拉筛选法求质数的算法解析

正常的埃氏筛选法是定义一个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开始记录每一个素数的值。不重复

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 2:02:25

Proxmark3硬件深度改造:从入门到精通的全方位升级指南

还在为Proxmark3的存储瓶颈和天线性能而困扰&#xff1f;&#x1f914; 这款被誉为RFID安全研究利器的设备&#xff0c;通过巧妙的硬件改装&#xff0c;可以释放出令人惊叹的潜能&#xff01;本文将带你深入了解Proxmark3 RDV4版本的完整改装方案&#xff0c;让你的设备性能实现…

作者头像 李华
网站建设 2026/5/25 12:23:19

3分钟搭建非终止小数计算验证工具

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个Web版小数计算验证器&#xff0c;功能包括&#xff1a;1. 输入任意分数表达式 2. 选择计算精度 3. 实时显示double和BigDecimal计算结果对比 4. 可视化误差分析。前端用Rea…

作者头像 李华
网站建设 2026/5/26 5:37:34

解锁5款免费二维码生成神器:开发者零成本集成指南

还在为项目中的二维码功能支付高昂费用吗&#xff1f;作为中小型项目开发者和产品经理&#xff0c;我们经常需要在应用、营销材料和用户系统中集成二维码功能&#xff0c;但商业工具的订阅成本往往成为预算负担。本文将为你揭秘5款完全免费的二维码生成工具&#xff0c;提供从A…

作者头像 李华
网站建设 2026/5/25 22:45:35

从零到生产:Netty开发效率提升300%的秘诀

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个对比工具&#xff0c;展示相同功能的网络服务用Java原生IO和Netty实现的差异。要求&#xff1a;1) 并排显示两种实现代码&#xff1b;2) 统计代码行数、性能指标等对比数据…

作者头像 李华
网站建设 2026/5/25 22:43:59

电商秒杀场景下的RocketMQ实战指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个电商秒杀系统Demo&#xff0c;要求&#xff1a;1. 使用RocketMQ处理秒杀请求 2. 实现消息顺序消费保证库存正确性 3. 包含峰值流量削峰方案 4. 展示死信队列处理失败订单 5…

作者头像 李华
网站建设 2026/5/25 5:28:18

Java 动态引擎 Liquor

Liquor &#xff08;动态编译后&#xff09;就是 Java 原生运行&#xff0c;比一般的 JVM 脚本&#xff08;或表达式&#xff09;性能高 “20 倍” 左右 Liquor 是一个开源的轻量级 Java 动态编译器 Liquor Java 动态编译器。支持完整的 Java 语法及各版本特性编译特点&#x…

作者头像 李华