题意不解释了,直接说方法。
首先观察数据范围,loss than 2^31次方,所以一般的暴力算法肯定会超时的,故需要从阶乘的本质入手
首先是一个数论的基本常识:
n!中间包含了多少个x(x是任意的一个数,不过一般情况下我们都只讨论x为质数),这种问题的答案是:
n/x+n/(x^2)+n/(x^3).....[一直加到x的乘方不超过n],这个定理的证明也非常的简单,这里就不再赘述了
然后还有一个数论的基本常识就是任意一个数的质因数分解
必须知道这种分解是唯一的
即合数y=sigma[(pi)^ni]
而且pi的范围在2——sqrt(n)之间;
于是乎,我们可以先分解掉m(这个花不了多少时间,如果用质数筛选法加速的话)
然后我们再去看m分解出来的每一个pi在n!中是否有足够多,为了提速。我们可以先从最大的pi开始算
以下是我的代码: