素数筛选法

来源:互联网 发布:全员网络闯关赛 题库 编辑:程序博客网 时间:2024/06/06 00:47

原理:

2是素数,所以所有[1,n]内为2的倍数的数都不是素数,需要被筛掉。

3是素数,所以所有[1,n]内为3的倍数的数都不是素数,需要被筛掉。

以此类推。


时间复杂度:近似O(n)

代码:

#include <iostream>#include <cstring>using namespace std;const int MAXN = 10000;int num, n, prime[MAXN], is_prime[MAXN];void fun(){is_prime[1] = 0;for(int i = 2; i < n; i++){if(is_prime[i]){prime[num++] = i;}for(int j = 0; j < num && i * prime[j] < n; j++){is_prime[i*prime[j]] = 0;if(0 == i % prime[j]) break;}}}int main(){memset(is_prime, -1, sizeof(is_prime));num = 0; n = MAXN; fun();for(int i = 0; i < num; i++){cout << prime[i] << " ";}cout << endl;return 0;} 


0 0