较快的方法预处理找到前N个质数,质数最大不超过Max。
int prime[N];
void getPrime() //预处理找出前几个质数
{
for(int i=2;i<=Max;i++)
{
if(!prime[i])prime[++cnt]=i; //第cnt个质数
for(int j=1;j<=cnt&&prime[j]<=Max/i;j++)
{
prime[prime[j]*i]=1; //用当前的数乘以之前找到的所有质数来排除后面的合数。
if(i%prime[j]==0)break; //如果当前的数与之前的质数不互质则跳出
}
}
}