- 当枚举到i时意味着所有2 -(i-1)的质因子都除干净了
- 同时 n 不包括任何2 - (i-1)的质因子了
- 所以i一定是质数
int div(int x){
int s = 0;
for(int i = 2; i <= n; i++){
if(n % i == 0){
while(n % i == 0){
n /= i;
s++;
}
}
}
return s;
}
- 因为n中最多只包含一个大于sqrt(n)的质因子,(若多于一个则相乘大于n了)
- 以枚举的时候先把小于等于sqrt(n)的质因子枚举出来, 只需要枚举到n / i,
- 后如果n > 1说明剩下来的就是唯一那个大于n的质因子,(1已经说明了最多只有只有一个大于sqrt(n)的质因子)
int div(int n){
int s = 0;
for(int i = 2; i <= n / i; i++){
if(n % i == 0){
while(n % i == 0){
n /= i;
s++;
}
}
}
if(n > 1) s++;
return s;
}


京公网安备 11010502036488号