news 2026/6/10 19:21:29

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

作者头像

张小明

前端开发工程师

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/6/10 17:46:04

17、OpenOffice与私有网络搭建全攻略

OpenOffice与私有网络搭建全攻略 1. OpenOffice简介与功能 Red Hat Linux 是一款实用的产品,拥有丰富的服务和应用程序。但此前它在桌面应用方面有所欠缺,缺乏一套完整的办公套件。而 OpenOffice 及其姊妹应用 StarOffice 的出现,改变了这一局面。 OpenOffice 是一款桌面…

作者头像 李华
网站建设 2026/6/10 11:25:11

27、Linux 文件系统管理与 RPM 包管理器使用指南

Linux 文件系统管理与 RPM 包管理器使用指南 1. 文件系统损坏修复与检查 在使用 Red Hat Linux 系统时,不当关机、驱动错误或者硬件崩溃等情况都可能导致文件系统损坏。当文件系统损坏后,文件可能无法打开,或者文件中的数据变得混乱无序。不过,因不正确关机导致的损坏通常…

作者头像 李华
网站建设 2026/6/9 23:44:19

Wan2.1-I2V终极指南:简单三步开启AI图生视频新纪元

Wan2.1-I2V终极指南&#xff1a;简单三步开启AI图生视频新纪元 【免费下载链接】Wan2.1-I2V-14B-480P 项目地址: https://ai.gitcode.com/hf_mirrors/Wan-AI/Wan2.1-I2V-14B-480P 在数字内容爆炸式增长的今天&#xff0c;静态图片已无法满足用户对动态视觉体验的渴求。…

作者头像 李华
网站建设 2026/6/10 10:53:54

Java开发者必看:Amazon Bedrock Runtime实战完全指南

Java开发者必看&#xff1a;Amazon Bedrock Runtime实战完全指南 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more info…

作者头像 李华
网站建设 2026/6/10 10:49:07

2.6 基本子空间和秩

1.四个基本子空间 2.计算左零空间 3.秩 1.四个基本子空间 对于一个m * n的矩阵A(有m行, n列), 该矩阵A有四个重要的向量子空间a.列空间(Column Space) - C(A)- 定义: 由矩阵A的所有列向量张成(线性组合生成)的子空间- 所在空间: Rᵐ(每个列向量有m个向量)- 几何意义: Ax b,…

作者头像 李华
网站建设 2026/6/10 11:53:07

uni-popup零基础入门:5分钟实现第一个弹窗

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个最简单的uni-popup入门示例&#xff0c;包含以下内容&#xff1a;1.如何在uni-app项目中安装uni-popup&#xff1b;2.最基本的弹窗实现代码&#xff1b;3.如何触发弹窗显示…

作者头像 李华