歐拉篩&&線性篩
阿新 • • 發佈:2018-12-07
set code namespace cout 復雜 ems bit end amp
復雜度
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; }
歐拉篩&&線性篩