求n!中因子k的个数

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(n1)(n2)......321

= ( k ∗ 2 k ∗ 3 k . . . . . ∗ m k ) ∗ a =(k*2k*3k.....*mk)*a =(k2k3k.....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)(123...m)a

= k m ∗ m ! ∗ a =k^m*m!*a =kmm!a

接下来按照相同的方法可以求出m!中含有因子k的个数。

因此就可以求除n!中因子k的个数

LL cal(ll n, ll x)
{
	ll ans = 0;
	while(n)
	{
		ans += n / x;
		n /= x;
	}
	return ans;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值