1、埃氏筛法
原理:每个质数的倍数一定不是质数
时间复杂度:O(n*loglogn),约等于O(n)
void get_primes(int n)
{
for(int i=2;i<=n;i++)
{
if(!st[i])
{
primes[cnt++]=i;
for(int j=2i;j<=n;j+=i) st[j]=true;
}
}
}
2、线性筛法
原理:每个合数一定会被它的最小质因子筛去
时间复杂度:O(n)
void get_primes(int n)
{
for(int i=2;i<=n;i++)
{
if(!st[i]) primes[cnt++]=i;
for(j=0;primes[j]*i<=n;j++)
{
primes[primes[j]*i]=true;
if(i%primes[j]==0) break;
}
}
}