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

C++ 中的 **普通筛、埃氏筛、线性筛**,它们都是求质数或判断质数的方法

普通筛、埃氏筛、线性筛,它们都是求质数或判断质数的方法,但原理和复杂度不同。

1️⃣ 普通筛(暴力判断质数)

思路:

  • 对每个数 i(2 ≤ i ≤ n),判断它是否能被小于它的数整除。
  • 如果不能整除,则 i 是质数。

复杂度:

  • 最坏情况下 O(n√n),当 n 较大时效率低。

C++ 示例:

#include <bits/stdc++.h>
using namespace std;bool isPrime(int x) {if (x < 2) return false;for (int i = 2; i * i <= x; ++i)if (x % i == 0) return false;return true;
}int main() {int n;cin >> n;for (int i = 2; i <= n; ++i) {if (isPrime(i)) cout << i << " ";}return 0;
}

2️⃣ 埃氏筛(Sieve of Eratosthenes)

思路:

  1. 建立长度为 n 的布尔数组 is_prime,初始都为 true。
  2. 从 2 开始,若 i 是质数,则把 i 的所有倍数标记为非质数。
  3. 最终 is_prime[i] 为 true 的就是质数。

复杂度:

  • O(n log log n)
  • 对 n ≤ 10⁷ 或 10⁸ 都够用。

C++ 示例:

#include <bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;vector<bool> is_prime(n+1, true);is_prime[0] = is_prime[1] = false;for (int i = 2; i*i <= n; ++i) {if (is_prime[i]) {for (int j = i*i; j <= n; j += i)is_prime[j] = false;}}for (int i = 2; i <= n; ++i) {if (is_prime[i]) cout << i << " ";}return 0;
}

3️⃣ 线性筛(Linear Sieve / 欧拉筛)

特点:

  • 保证每个合数只被它最小的质因子标记一次。
  • 可以顺序生成质数数组 primes
  • 复杂度 O(n)(比埃氏筛更快)。

思路:

  1. 遍历每个数 i(2 ≤ i ≤ n)

  2. 如果 i 是质数,加入 primes 数组

  3. 遍历 primes 数组:

    • 计算 i * primes[j] ≤ n
    • 标记 i * primes[j] 为非质数
    • 如果 i % primes[j] == 0,则 break(保证每个数只被它最小的质因子标记一次)

C++ 示例:

#include <bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;vector<int> primes;vector<bool> is_prime(n+1, true);for (int i = 2; i <= n; ++i) {if (is_prime[i]) primes.push_back(i);for (int p : primes) {if (i * p > n) break;is_prime[i*p] = false;if (i % p == 0) break;}}for (int p : primes) cout << p << " ";return 0;
}

特点对比:

筛法 时间复杂度 优点 缺点
普通筛 O(n√n) 代码简单 n 大时慢
埃氏筛 O(n log log n) 高效,易实现 不能直接获取最小质因子
线性筛 O(n) 高效,可求最小质因子 实现稍复杂

http://www.fuzeviewer.com/news/43869/

相关文章:

  • 嘉兴专业自助建站免费咨询搞钱路子一天两万
  • 用自己电脑做网站服务器建设网站产品图片显示不全
  • 网站代码优化的方法北京网站开发设计
  • 做搬运的话哪个网站好海外建站
  • 丹阳市住房建设管理局网站专业网页制作费用
  • 重庆装修公司前十强网页设计优化网站建设可以吗
  • 域名还在备案可以做网站吗咸阳seo推广
  • 我有网站 怎么做淘宝推广的企业网站有哪些举例
  • 网站开发视频播放好做吗开公司要多少注册资金
  • 个人备案网站做什么重庆h5建站
  • 沈阳德泰诺网站建设公司怎么样安徽省工程信息网官网
  • 网站开发3687474企鹅企业网站设计费做哪个科目
  • 实验室网站建设方案舆情信息范文
  • dedecms 调用 两个网站虚拟主机空间发布网站
  • 宁海县建设局网站下属单位百度对新网站排名问题
  • 石家庄网站开发与优化北京注册公司交社保
  • 网站做排名手机网站模板免费模板
  • 建设项目流程八个阶段太原网站优化怎么做
  • 做网站购买虚拟主机送模板吗花都网站建设设计
  • 东莞高端品牌网站建设湖南省郴州市北湖区
  • 科学计算复习
  • 上海做机床的公司网站中企动力销售怎么样
  • 网站的交流的功能怎么做个体工商户网站备案
  • 2025年11月温州律师事务所最新推荐,实力机构深度解析与择选指南!
  • 卫辉市住房和城市建设局网站网站运营推广方式
  • wordpress怎么制作菜单东莞网站seo公司哪家大
  • 网站设计与开发房地产网官网
  • 陕西建设厅继续教育网站巧家县城乡建设局网站
  • 长沙市网站制作外包app开发
  • 山西网站制作方案网站建设申请计划