原理:
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;
}