用于计算单个整数的质因数个数,无视重复的质因数。
const int maxv = 2e7+5; //注意修改maxv数值
int mind[maxv],val[maxv];
void init(){
for(int i=1;i<maxv;i++) mind[i] = -1;
mind[1] = 1;
for(int i=2;i<maxv;i++){
if(mind[i] == -1){
for(int j=i;j<=maxv;j+=i) mind[j] = i;
mind[i] = i;
}
}
for(int i=2;i<maxv;i++){
int j = i/mind[i];
val[i] = val[j]+(mind[i]!=mind[j]);
}
}