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

欧拉筛法简介

【欧拉筛法简介】
● 欧拉筛(Euler Sieve / Linear Sieve)是一种线性时间复杂度(O(n))的素数筛选算法,核心目标是找出 2~n 范围内的所有素数,且保证每个合数只被它的最小质因子筛除一次 —— 这是它区别于其他筛法(如埃氏筛)的关键,也是 “线性复杂度” 的来源。

● 欧拉筛(线性筛) 通过每个合数仅被其最小质因数筛除的规则,将时间复杂度优化至严格 O(n),使得欧拉筛是处理更大范围素数(如 1e7~1e8)的优选算法。欧拉筛(线性筛)没有埃氏筛法重复筛除合数的核心局限性。埃氏筛的核心代码如下所示。

void euler_sieve(int n) {st.assign(n+1,true); //0~nst[0]=st[1]=false;for(int i=2; i<=n; i++) {if(st[i]) p.push_back(i);for(int j=0; (LL)p[j]*i<=n; j++) {st[p[j]*i]=false;if(i%p[j]==0) break;}}
}

● 但是要注意,欧拉筛不是欧拉发明的。之所以叫欧拉筛,原因在于欧拉筛的核心思想用到了整数唯一分解定理(任何一个大于 1 的整数 N,都可以唯一地表示成若干个质数的乘积)。而欧拉对此贡献巨大,所以后人把这种线性筛尊称为:欧拉筛(Euler sieve)。

●​​​​​​​ 示意图中用颜色“赤橙黄绿青蓝紫”表示被欧拉筛(线性筛)依次筛掉的数。显然,没有被重复筛除的合数。

欧拉筛

●​​​​​​​ 欧拉筛(线性筛) 为什么 i%p[j]==0 时要 break?
☆ 两个前提
(1)欧拉筛的核心原则:每个合数只会被它的最小质因子筛掉(这是线性复杂度的关键)。 (2)p[j] 是按从小到大顺序存储的素数(p[0]=2, p[1]=3, p[2]=5...)。
☆ 核心逻辑
(1)当 i % p[j] == 0 时,说明 p[j] 是 i 的最小质因子(因为 p[j] 是从小到大遍历的,第一个能整除 i 的素数就是最小质因子)。此时 i = p[j] * m(m 是一个整数)。接下来我们看下一个要筛的数是 p[j+1] * i,代入 i = p[j] * m 可得:p[j+1] * i = p[j+1] * p[j] * m = p[j] * (p[j+1] * m)。
(2)这里能明显看出,这个数 p[j+1] * i 的最小质因子是 p [j](因为 p[j] < p[j+1]),而不是 p[j+1]。所以这个数 p[j+1] * i 不应该在当前轮次(用 p [j+1] 筛)被标记,而应该在后续某个 i' = p[j+1] * m 时,被 p[j] 筛掉(因为 p[j] 是它的最小质因子)。

【欧拉筛法代码】
代码来源于“洛谷 P3383”:https://blog.csdn.net/hnjzsyjyj/article/details/157643691

#include<bits/stdc++.h>
using namespace std;typedef long long LL;
vector<bool> st; //isPrime
vector<int> p; //primevoid euler_sieve(int n) {st.assign(n+1,true); //0~nst[0]=st[1]=false;for(int i=2; i<=n; i++) {if(st[i]) p.push_back(i);for(int j=0; (LL)p[j]*i<=n; j++) {st[p[j]*i]=false;if(i%p[j]==0) break;}}
}int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n,q,k;cin>>n>>q;euler_sieve(n);while(q--) {cin>>k;cout<<p[k-1]<<"\n";}return 0;
}/*
in:
100 5
1
2
3
4
5out:
2
3
5
7
11
*/






【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/157643691
https://blog.csdn.net/hnjzsyjyj/article/details/157992542
https://blog.csdn.net/hnjzsyjyj/article/details/157643126

 

http://www.jsqmd.com/news/378301/

相关文章:

  • 瑞祥卡回收流程详解:快速兑换现金的实用技巧 - 团团收购物卡回收
  • 闲置京东超市卡如何高价回收?团团收靠谱平台分享! - 团团收购物卡回收
  • 2026年波波知了怎么样?企业综合服务平台实用体验 - 品牌排行榜
  • 剖析2026年不错的车位包销企业是怎么收费 - 工业品牌热点
  • 豆包AI品牌推广是否值得企业提前布局? - 品牌2025
  • 【ACM出版】第三届机器学习与神经网络国际学术会议(MLNN 2026)
  • 环保板材生产厂哪家合作案例多?哪家材料质量好? - mypinpai
  • 细聊口碑相传的安费诺连接器供应商,合作费用多少钱? - 工业品网
  • 波波知了新媒体舆情服务怎么样?2026企业口碑管理新选择 - 品牌排行榜
  • 银河麒麟V10安装 openssl-1.1.1f-4.p12.ky10.x86_64.rpm 教程(含依赖解决)
  • 2026年碳黑正规供应商推荐,颜旭新型材料值得选吗 - 工业推荐榜
  • 2026养生壶最建议买的品牌推荐及选购指南 - 品牌排行榜
  • 分析广州会议策划服务价格,有案例的会议策划公司哪家好 - 工业品牌热点
  • 波波知了AI服务有哪些?八大核心能力赋能企业发展 - 品牌排行榜
  • 聊聊2026年广州靠谱的企业团建机构排名情况 - myqiye
  • 2026电压力锅哪个牌子最好最安全?安全耐用品牌推荐 - 品牌排行榜
  • 一盏灯里的非遗与未来 - 速递信息
  • 外贸邮件群发不封号攻略:避开3个坑,选对方法高效获客 - U-Mail邮件系统
  • 携程任我行卡这样回收最划算! - 团团收购物卡回收
  • 聊聊环保板材定制厂家口碑排名,哪个品牌更靠谱 - mypinpai
  • 自感专论(定稿七九本)
  • 2026年南京可靠的润色公司盘点,资质齐全的润色企业排名 - 工业设备
  • 如何选择制氮机?可参考这些供应商,液氧/二氧化碳/液氩/液氮速冻机/液氮/储罐/制氧机/汽化器,制氮机厂商推荐榜单 - 品牌推荐师
  • 2026年靠谱的奖励旅游服务企业推荐 - myqiye
  • Python接口开发实测:AI研发助手用法分享+实操心得
  • 简单理解:嵌入式细分行业有哪些?前景怎么样?
  • 聊聊有实力的车位包销品牌企业,哪家性价比高 - mypinpai
  • Windows 文档文件夹被 OneDrive 接管:原因分析与彻底修复方案
  • python异步函数语法解析,async with ... as ...语法解析
  • 解读环保板材生产企业哪家个性化定制强?怎么选择? - 工业品网