n ! = ( k m ) ∗ ( m ! ) ∗ a n!=(k^m)*(m!)*a n!=(km)∗(m!)∗a 其中k是该因子, m = n / k m=n/k m=n/k,a是不含因子k的数的乘积
下面推导这个公式
n ! = n ∗ ( n − 1 ) ∗ ( n − 2 ) ∗ . . . . . . 3 ∗ 2 ∗ 1 n!=n*(n-1)*(n-2)*......3*2*1 n!=n∗(n−1)∗(n−2)∗......3∗2∗1
= ( k ∗ 2 k ∗ 3 k . . . . . ∗ m k ) ∗ a =(k*2k*3k.....*mk)*a =(k∗2k∗3k.....∗mk)∗a a是不含因子k的数的乘积,显然 m = n / k ; m=n/k; m=n/k;
= ( k m ) ∗ ( 1 ∗ 2 ∗ 3... ∗ m ) ∗ a =(k^m)*(1*2*3...*m)*a =(km)∗(1∗2∗3...∗m)∗a
= k m ∗ m ! ∗ a =k^m*m!*a =km∗m!∗a
接下来按照相同的方法可以求出m!中含有因子k的个数。
因此就可以求除n!中因子k的个数
LL cal(ll n, ll x)
{
ll ans = 0;
while(n)
{
ans += n / x;
n /= x;
}
return ans;
}