筛质数时首先要了解质数的定理:1~n中有 个质数
下面再来看具体算法:
1.朴素筛法:
直接把2~n-1中质数和合数的倍数都筛一遍,其代码如下所示:
int primes[N],cnt=0;
bool st[N]={false};
void get_prime(int n)
{
for(int i=2;i<=n;i++)
{
if(!st[i])
primes[cnt++]=n;
for(int j=i+i;j<=n;j+=i)
st[j]=true;
}
}
时间复杂度分析为下图:
2.埃拉托色尼筛法(the Sieve of Eratosthenes):
首先说一下它的概念: