生成n以内的质数:
易知一个整数最大质因数不会超过其算术平方根,所以只需要从1-n中
剔除1-n^0.5中质数的所有整数倍即可(质数本身除外).
n为一千万时大概只需要0.3秒多.
bool prim[n];//true为质数
void makeprim()
{
memset(prim,true,sizeof(prim));
prim[0]=prim[1]=false;
int k=sqrt(n);
int i,j;
for(i=2;i<=k;i++)
{
if(prim[i]==false)continue;//找到下一个质数进行剔除
for(j=i;j*i<n;j++)
prim[j*i]=false;
}
}