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

news/2025/11/16 18:09:24/文章来源:https://www.cnblogs.com/kkman2000/p/19228640

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

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.mzph.cn/news/967247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux - sudo -i

Linux - sudo -i在 Linux 中,sudo -i 的作用是 启动一个模拟 root 用户登录的环境(login shell),让你进入一个“像是用 root 登录系统一样”的 Shell。 下面是重点解释:✅ sudo -i 做了什么? 当你执行:sudo -i …

利用单片机的TIM模块播放春日影

利用TIM模块演奏音乐 大致思路利用一个定时器输出PWM波控制蜂鸣器音调,另一个定时器模块控制播放的节奏准备部分 设计电路 准备材料导线若干,稳压二极管,无源蜂鸣器设计电路图将蜂鸣器按照极性接分别接在信号源和接…

warp-cli代理

curl https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpgecho "deb [arch=amd64 signed-by=/usr/share/keyrings/clou…

完整教程:Rust语言特性深度解析:所有权、生命周期与模式匹配之我见

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【2025-11-14】工作压力

20:00一个经受过种种磨难的人在多年以后回想起这些遭遇时,甚至会感到一种乐趣。——[古希腊]荷马《奥德赛》昨晚发现家里已经没有备用洗发水了,何太说要用她快过期的一千块福利积分购买。当我听到“快过期的一千块积…

20232401 2024-2025-1 《网络与系统攻防技术》实验五实验报告

20232401 2024-2025-1 《网络与系统攻防技术》实验五实验报告 1.实验内容1.1 DNS查询获取相关信息 1.2 实际场景获得通信对方的IP并获取地理位置 1.3 nmap扫描靶机获取信息 1.4 Nessus扫描靶机获取信息并尝试利用漏洞 …

do文件仿真 fpga

do文件仿真 fpga 原文连接: https://www.bilibili.com/video/BV1DY411B7aV/?spm_id_from=333.337.search-card.all.click&vd_source=ac9167e61e0c909658ec9e3b6350cd4e

20232412 2024-2025-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 实验要求 (1)选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式、该域名对应IP地址、IP地址注册人及联系方式、IP地址所在国家、城市和具体地理位置。 PS:使用whois、dig、nslookup、tracero…

本地缓存Caffeien

为什么用本地缓存 低延迟高吞吐:本地缓存直接存储在JVM堆内存中,读写操作无需网络传输,延迟可低至纳秒级,显著优于Redis等分布式缓存的毫秒级响应 。降低Redis压力:在多级缓存架构中,本地缓存作为第一层缓存,可…

实用指南:C++---嵌套类型(Nested Types)封装与泛型的基石

实用指南:C++---嵌套类型(Nested Types)封装与泛型的基石2025-11-16 17:51 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

[ sqlite ]

# 查看所有的表 .tables.schema <tabale name># 打开数据库后先切好显示模式 .headers on .mode column # 查看表结构与列名 .schema ZBILLENTITY PRAGMA table_info(ZBILLENTITY);

视野修炼-技术周刊第127期 | Valdi

① tasuku - 极简 Node 任务处理 ② fkill - 强制终止进程 ③ FileMock ④ Valdi - 新的跨平台 UI 框架 ⑤ JavaScript 引擎大全 ⑥ 使用 Error.cause 进行错误处理 ⑦ GitHub Repo Visibility Analyzer欢迎来到第 127…

完整教程:机器学习:基于大数据的基金数据分析可视化系统 股票数据 金融数据 股价 Django框架 大数据技术(源码) ✅

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

科学计算复习

Scientific Computing Review Outline Author: Hu Si Date: 2025-11-16 Floating-Point Number SystemExample Problem 1.3 Let ( x_f ) and ( y_f ) be adjacent floating-point numbers (positive normal floats). W…

【AIGC】语音识别ASR:火山引擎大模型技术实践 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年11月石笼网厂家最新推荐,聚焦资质、案例、售后的五家企业深度解读!

在水利防护、交通建设、生态修复等全球重点工程领域,石笼网的品质直接决定工程安全与使用寿命。据国际丝网产业协会(ISIA)2025 年 11 月最新测评数据显示,全球石笼网市场合格率仅为 72%,部分产品因材质劣质、工艺…

2025 年 11 月石笼网厂家最新推荐,技术实力与市场口碑深度解析!

在全球水利工程、边坡防护、生态治理等领域,石笼网的技术工艺与产品品质直接影响工程安全稳定性。据国际建筑防护材料协会(IBPMA)2025 年 11 月发布的测评报告显示,全球石笼网企业中仅 38% 具备核心生产技术专利,…

2025年11月温州律师事务所最新推荐,实力机构深度解析与择选指南!

本次推荐基于国际律师协会(IBA)2025 年度测评标准及第三方数据机构的全年动态监测,覆盖 120 余家法律服务机构的核心维度。测评采用 “定量 + 定性” 双轨体系:定量维度依托 2024-2025 年度公开案例数据库,分析 1…