数论——两种质数筛法
1. 埃氏筛
$$
O(n loglogn )
$$
- 质数的倍数都是合数。借助这个性质,我们可以先找到一个质数,并利用这个质数,将范围内所有非质数(合数)的给先打上标记
- 缺点:6会被2和3给打上两次标记,会造成计算的浪费
bool nprime[N];//0为否定,为质数 ,1为肯定,为非质数
int prime[N],cntprime=0;
int main()
{
int n;
cin>>n;
for(int i=2;i<=n;i++)
{
if(!nprime[i])//质数为0,加上!来使得条件为true
{
prime[cntprime++]=i;
for(int j=2*i;j<=n;j=j+i)
nprime[j]=1;
}
}
}
2.欧拉筛
$$