bool visit[10100000];
int prime[10000000];
// n 以内的素数
const int n = 100000;
//从数组下标 1 开始存
void init_prim()
{
memset(visit, true, sizeof(visit));
int num = 0;
for (int i = 2; i <= n; ++i)
{
if (visit[i] == true)
{
num++;
prime[num] = i;
}
for (int j = 1; ((j <= num) && (i * prime[j] <= n)); ++j)
{
visit[i * prime[j]] = false;
if (i % prime[j] == 0) break; //点睛之笔
}
}
}
int main()
{
init_prim();
for(int i=1;i<=10000;i++)
cout<<prime[i]<<" ";
return 0;
}
void init() //预处理[1,1e6]范围内的素数
{
//i既是【2,1e6】的数,又是下面for循环中每个素数的倍数(2倍到1e6倍)
for(int i=2; i<1000000; i++)
{
if(!isprime[i])
prime[num_prime++]=i;
for(int j=0; j<num_prime&&i*prime[j]<maxn; j++)
{
isprime[i*prime[j]]=1;
if(i%prime[j]==0)
break;
}
}
}
埃氏筛
int num;//素数个数
int maxn;//maxn 以内的素数
int use[maxn];//依次存储素数
int prime[maxn];//该位置是否为素数
void init_prime()
{
num=0;
memset(prime,0,sizeof(prime));
prime[0]=prime[1]=1;
for(int i=2;i<=maxn;i++)
if(prime[i]==0)
{
use[++num] = i;
for(int j=2*i;j<=maxn;j=j+i)
prime[j]=1;
}
}