int half=size/2;
int sn;
int prime[sn];//估算素数的个数:sn=size/ln(size);
bool p[half];//只需要检查奇数,因为质数除了2是偶数,其他的都是奇数
memset(p,1,sizeof(p));
for(i=0;i<cn;i++) //cn=(sqrt(size)-3)/2;
{
if(p[i])
{
for(k=2*i+3,j=k*i+k+i;j<half;j+=k) //起点为k*k,对应位置为k*i+k+i
{
p[j]=false; //每次筛掉k的奇数倍
}
}
}
for(prime[i=0]=2,j=1;i<half;i++)
{
if(p[i]) prime[j++]=(i<<1)+3;
}
筛法求素数
最新推荐文章于 2021-11-10 21:50:55 发布