筛法求素数
第一种
bool number[N+1];
int i,j;
memset(number,true,sizeof(number));
number[1] = number[0] = false;
for(i=2; i<=sqrt(N); i++) {
if(number[i]==true) {
for(j=i*i; j<=N; j+=i) {
number[j]=false;
}
}
}//所有非素数都标记为false,素数都标记为true
for(i=2; i<N+1; i++)
if(number[i]==true)
printf("%d ",i);
第二种
void get_pri(int n)
{
vis[1] = true;
for(int i = 2;i <= n;i++)
{
if(!vis[i]) pri[++cnt] = i;
for(int j = 1;j <= cnt && i*pri[j] <= n;j++)
{
vis[i*pri[j]] = true;
if(i%pri[j] == 0) break;
}
}
}