概况
Eratosthenes筛法是一个素数筛法,可以在近线性时间内制作出\(1-n\)的素数表。
\(\mathfrak{Eratosthenes}\)筛法
思想很简单。对于一个正整数\(p(p\in[1,n])\),筛除\(2p,3p,4p,...\),待将所有数处理完以后,剩下的就都是指质数了。
同时,我们还可以限定\(p\)为质数。
inline void Eratosthenes(int n)
{
memset(isprime,0,sizeof(isprime));
isprime[0]=isprime[1]=1;
register int i,j;
for(i=2;i*i<=n;i++)if(!isprime[i])
for(j=i*i;j<=n;j+=i)
isprime[j]=1;
for(i=1;i<=n;i++)isprime[i]=(isprime[i])?0:1;
return;
}
这个算法是\(O(nloglogn)\)的,可以基本满足需求。
模板题:Luogu P3383