简单表示:isPrime[i]等于0表示i不是素数,否则等于1则表示i是素数。
#define MAX 5000005
long isPrime[MAX];
void initPrime(){
long i,j;
isPrime[0]=isPrime[1]=0;
for(i=2;i<MAX;i++)isPrime[i]=1;
for(i=2;i<MAX;i++){
if(isPrime[i]){
for(j=2;i*j<MAX;j++)
isPrime[i*j]=0;
}
}
}
附:
求一个数的质因子个数(比如6=2*3质因子数为2,又如8=2³质因子数为3)
1)先用快速帅选素数法标出素数以及每个数的最大质因子。
2)那么再处理这个数的质因子个数就是除以最大质因子之后的那个数的质因子个数+1;(dp求解)