首先说一下分解质因数:
唯一分解定理:任何一个数都可以唯一分解为几个质数的幂次乘积。
const int maxn = 1e6+5; int p[maxn], c[maxn]; int cnt = 0; void divided(int n){ for(int i = 2; i * i <= n; i++){ if(n % i == 0){ p[++cnt] = i; c[cnt] = 0; while(n % i == 0) n /= i, c[cnt]++; } } if(n > 1) p[++cnt] = n, c[cnt] = 1; }
阶乘的因式分解:
求1~n之内的数,因子为2的个数,即是求n!这个数中因子为2的个数
int sum = 0;
while(n){
sum += n/2;
n /= 2;
}
ull fun(ull n, ull x){ ull res = 0; while(n){ res += n / x; n /= x; }