欧拉筛(时间复杂度 )
const int prime_max = 100000010;
bool st[prime_max];
int prime[prime_max], cnt;
void init()
{
cnt = 0; st[1] = 1;
for(int i = 2; i < prime_max; i++)
{
if(!st[i])
prime[cnt++] = i;
for(int j = 0; j < cnt; j++)
{
if(1ll * i * prime[j] >= prime_max)
break;
st[i * prime[j]] = 1;
if(i % prime[j] == 0)
break;
}
}
}
埃氏筛(时间复杂度
const int prime_max = 10000010;
int st[100000010];
void init()
{
st[1] = 1;
for(int i = 2; i * i <= prime_max - 10; i++)
{
if(!st[i])
{
for(int j = i * i; j <= prime_max - 10; j += i)
st[j] = 1;
}
}
}