【学习笔记】欧拉线性筛
欧拉线性筛
简介
欧拉线性筛主要用于求以内的所有素数,时间复杂度为
算法实现
欧拉线性筛的原理是保证以内的所有素数只被他所含有的最小质因子筛过,这样就使得每个素数只被筛过了一次。
我们设一个数组表示第个素数是多少,表示第个数是否为素数。
对于外层循环,我们枚举从1枚举到,如果当前为素数,那么我们就把它加入到数组中。
对于当前已经出现过的素数,那么它与的乘积就一定为合数,所以。注意在枚举时,
欧拉函数的精华
这条语句保证了所有数只被它最小的质因子筛到。
对于当前所有筛到的数,都含有一个因数,上面这条语句一旦执行,就表示就是最小的质因子,我们令,则往后所有的,所以往后筛到的所有数的最小质因子都是,不用来筛掉,所以终止循环。
模板代码
#include<bits/stdc++.h>
#define maxn 100000010
using namespace std;
int n,q,tot=0,prime[maxn];
bool isprime[maxn];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>q;
memset(isprime,1,sizeof(isprime));
for(int i=2;i<=n;i++){
if(isprime[i])prime[++tot]=i;
for(int j=1;prime[j]*i<=n&&j<=tot;j++){
isprime[prime[j]*i]=0;
if(i%prime[j]==0)break;
}
}
while(q--){
int k;
cin>>k;
cout<<prime[k]<<endl;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】