埃拉托色尼質數篩法
阿新 • • 發佈:2019-03-02
一次 i++ das code sin ostream turn 算法 oid
所謂質數的篩法,就是在一個給定的區間中判斷哪些數是質數,哪些數不是質數
這是OI常用質數篩選方法的第一種——Eratosthnes
用到的性質是 質數的倍數一定不是質數 所以我們就可以先定義一個數組,起初
認為這個數組中所有的全部都是質數,然後通過循環一次一次的把質數的倍數置
成true,意為它是合數。
由於這個算法不能確定唯一產生合數的方式,比如20,這個合數會被質數2篩選
一次,也會被質數5篩選一次,所以這個算法不是最快的質數篩法,它的復雜度
是O(nlognlogn).
註意:1既不是質數也不是合數.
Code:
#include<cstdio> #include<iostream> #include<cstring> using namespace std; int isprime[2333]; void prime(int n) { memset(isprime,0,sizeof(isprime)); for(int i=2;i<=n;i++) { if(isprime[i]) continue; printf("%d ",i); for(int j=2;i*j<=n;j++) isprime[i*j]=true; } return; } int main() { int n; cin>>n; prime(n); return 0; }
埃拉托色尼質數篩法