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

埃式筛法欧拉筛法质数分布定理

埃拉托斯特尼筛法

时间复杂度O(nloglogn)

保证每个合数都会被筛出:每个合数必能分解出质数,从而一定会被筛出

不能保证每个合数只会被筛一遍(时间复杂度控制):每个合数可能被多个较小质因数筛出,如120会被2,3,5重复筛选,造成时间浪费(这点不如欧拉筛,欧拉筛不会重复筛选)

题目:P3383 【模板】线性筛素数 - 洛谷

code

注意:先将p * i标记为素数,再if (i % p == 0) break;

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;vector<int> primes;
vector<bool> vis = vector<bool>(1e8 + 7, false);void ola(int n)
{for (int i = 2; i <= n; i++){if (!vis[i])primes.push_back(i);for (int p : primes){if (p * i > n) break;vis[p * i] = true;if (i % p == 0) break;}}
}int main()
{int n, q; cin >> n >> q;ola(n);while (q--){int k; cin >> k;cout << primes[k - 1] << endl;}return 0;
}

欧拉筛法

时间复杂度:O(N)

  • 核心思想:让每一个合数被其最小质因数筛到
  • 所以,我们不需要用一个for循环去筛除一个质数的所有倍数,我们将所有质数存储到primes[]中,然后枚举到第i个数时,就筛去所有的primes[j]*i。这样就在每一次遍历中,正好筛除了所有已知素数的i倍。
  • 但是为了确保合数只被最小质因子筛掉,最小质因子要乘以最大的倍数,即要乘以最大的i,所以不能提前筛,所以如果i% primes[j] == 0,我们就结束内层循环!

题目:P3912 素数个数 - 洛谷

code

#include <iostream>
#include <vector>
#include <cstring>
using namespace std;const int _max = int(1e8 + 7);
long long ans = 0;
bool isprime[_max];void ai(int N)
{memset(isprime, true, sizeof(isprime));for (int i = 2; i <= N / i; i++){if (!isprime[i]){continue;}for (int j = i + i; j <= N; j += i){isprime[j] = false;}}
}int main()
{int N; cin >> N;ai(N);for (int i = 2; i <= N; i++) if (isprime[i]) ans++;cout << ans << endl;return 0;
}

质数分布定理

质数密度为1/lnN, N为自然数个数, 由此可知,前N个自然数中有大约N/lnN个质数

http://www.xdnf.cn/news/1314829.html

相关文章:

  • C++核心语言元素与构建块全解析:从语法规范到高效设计
  • EC11编码器
  • 关于原理解析和编程技巧的深度探索!
  • 【计算机网络面试】TCP/IP网络模型有哪几层
  • LaTeX中表示实数集R的方法
  • 19.5 「4步压缩大模型:GPTQ量化实战让OPT-1.3B显存直降75%」
  • 计算机网络 HTTP和HTTPS 区别
  • 字符串的说明以及应用
  • topographic terrain
  • Spring IOC 学习笔记
  • 关于pygsp引发的一系列问题和实例小demo
  • wrap go as a telnet client lib for c to implement a simple telnet client
  • 深入分析 Linux PCI Express 子系统
  • VS Code配置MinGW64编译Ipopt库
  • 《智能体(Agent)速记指南》
  • 安卓11 12系统修改定制化_____修改系统默认域名解析规则 实现屏蔽广告 屏蔽应用更新等功能
  • 北京JAVA基础面试30天打卡11
  • 2025年睿抗国赛本科组题解
  • Spring AI架构分析
  • Gradle#构建生命周期三个阶段
  • 小白学习《PCI Express体系结构导读》——第Ⅰ篇第1章PCI总线的基本知识
  • DAY12DAY13-新世纪DL(Deeplearning/深度学习)战士:破(改善神经网络)1
  • 机器学习——PCA算法
  • C语言指针运算题
  • Pycaita二次开发基础代码解析:交互选择、参数化建模与球体创建的工业级实现
  • 第5问 对于数据分析领域,统计学要学到什么程度?
  • 【深度学习】基于ESRNet模型的图像超分辨率训练
  • 软考 系统架构设计师系列知识点之杂项集萃(124)
  • 软件SPI实现(3):SPI协议测试(使用W25Q64)
  • 11.web api 2