- 当枚举到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; }