1. 程式人生 > >埃拉托色尼質數篩法

埃拉托色尼質數篩法

一次 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; }

埃拉托色尼質數篩法