news 2026/8/6 14:17:57

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

作者头像

张小明

前端开发工程师

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/8/5 4:10:48

专业的防腐涂料厂家

专业防腐涂料厂家如何选择&#xff1f;海洋涂料品牌推荐在工业防护领域&#xff0c;防腐涂料的质量直接关系到设备寿命和安全性能。随着技术进步&#xff0c;专业防腐涂料厂家不断推出创新产品&#xff0c;其中海洋涂料因其卓越的耐腐蚀性能而备受关注。本文将为您解析如何选择…

作者头像 李华
网站建设 2026/8/4 8:01:23

如何快速掌握Spark-Store:Linux应用商店终极使用指南

如何快速掌握Spark-Store&#xff1a;Linux应用商店终极使用指南 【免费下载链接】星火应用商店Spark-Store 星火应用商店是国内知名的linux应用分发平台&#xff0c;为中国linux桌面生态贡献力量 项目地址: https://gitcode.com/spark-store-project/spark-store 在Lin…

作者头像 李华
网站建设 2026/8/4 12:28:57

26、Linux 文件与文件系统管理全攻略

Linux 文件与文件系统管理全攻略 1. Linux 文件与目录操作 1.1 操作符号介绍 >> :此符号被称为追加标准输出。使用它时,意味着让计算机“捕获通常会显示在屏幕上的信息,并将这些信息追加到一个已有的文件中。若该文件不存在,则创建它”。 < :该符号告诉计算…

作者头像 李华
网站建设 2026/8/6 7:52:20

AI自动修复SpringBoot Actuator未授权漏洞实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个SpringBoot应用安全检测工具&#xff0c;能够自动扫描项目中Actuator端点的安全配置。当检测到未授权访问漏洞时&#xff0c;自动生成修复方案&#xff1a;1) 添加Spring S…

作者头像 李华
网站建设 2026/8/5 23:27:43

电商系统中的应用启动优化实战:ApplicationRunner案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个电商系统的ApplicationRunner组件&#xff0c;专门处理订单服务启动时的库存服务依赖检查、缓存预热和灰度发布配置加载。要求支持多环境配置&#xff0c;包含Redis连接检查…

作者头像 李华
网站建设 2026/8/6 4:55:53

用ComfyUI快速验证创意:10分钟打造概念原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个快速创意原型工作流&#xff0c;要求&#xff1a;1) 支持多种创意输入方式(文本、草图、色板) 2) 快速生成3种风格变体 3) 实时调整关键参数 4) 一键导出概念图 5) 添加简易…

作者头像 李华