欧拉筛&&线性筛
Posted mch5201314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了欧拉筛&&线性筛相关的知识,希望对你有一定的参考价值。
复杂度
n
分析
其实就是把埃筛的改进罢了,避免重复
具体看代码
代码
#include<bits/stdc++.h>
using namespace std;
bool vis[10000000];
int prime[10000];
int Oulashai(int n){
memset(vis,0,sizeof(vis));
int cnt=0;
for(int i=2;i<=n;i++){
if(!vis[i]) prime[cnt++]=i;
for(int j=0;j<cnt&&i*prime[j]<=n;j++){
vis[i*prime[j]]=true;
if(i%prime[j]==0) break;
//这个地方关键因为
//i%prime[j]==0,可以把i看做prime[j]*x,那么(k>i)i*prime[k]==prime[j]*x*prime[k];
//又可以把 x*prime[k]另一个数,那么将来的某次循环会把i*prime[k]==prime[j]*x*prime[k]
//给筛了,从而避免了重复
}
}
return cnt;
}
int main(){
int n,i;
while(cin>>n){
for(i=0;i<Oulashai(n);i++)
{
cout<<prime[i]<<‘ ‘;
if(i%10==0) cout<<endl;
}
}
return 0;
}
以上是关于欧拉筛&&线性筛的主要内容,如果未能解决你的问题,请参考以下文章