1.埃拉托斯特尼筛法
太难记
简称——埃氏筛
复杂度O(nloglogn)
const int MAXN = 100007;
bool cheak[MAXN];//素数为false
int prime[MAXN];//存第i个素数的值
int cnt;//素数个数
void Prime()
{
for(int i = 2; i <= MAXN; i++)
{
if(!cheak[i])
{
prime[++cnt] = i;
for(int j = 2*i; j <= MAXN; j += i)
cheak[j] = true;
}
}
}
2.欧几里得筛法
简称——欧式筛
复杂度O(n)
void Prime()
{
for(int i = 2; i <= MAXN; i++)
{
if(!cheak[i]){
prime[++cnt] = i;
}
for(int j=1;j<=cnt&&i*prime[j]<=MAXN;j++){
cheak[i*prime[j]] =true;
if(i*prime[j] == 0)
break;
}
}
}