素数的两个打表的方法

#define N 2000000
#define M 148933

bool NotPrime[N]={1,1,0};
int Prime[M];
int PrimeNum=0;

void pr()//比较好
{
int i,j;
for(i=2;i<=1415;i++)
if(!NotPrime[i])//如果i是素数
{
Prime[PrimeNum++]=i;
for(j=i*i;j<=N;j+=i)
{
NotPrime[j]=1;
}
}
for( i=Prime[PrimeNum-1]+1;i<=N;i++)
if(!NotPrime[i]) Prime[PrimeNum++]=i;
}

 其实 1415=sqrt(N)+1;

View Code
 bool notprime[N];
int prime[M];
int cont=0;
void pr1()
{
int i,j;
for(i=2;i<N;i++)
{
if(!notprime[i]) prime[cont++]=i;
else continue;
for(j=2*i;j<N;j+=i)
notprime[j]=true;
}
}




posted @ 2012-03-07 19:07  mtry  阅读(327)  评论(0)    收藏  举报