前言:更符合人类的做法,比大多数题解少一个 。
MegaFactorial
给定 。有
计算 在 进制下末尾 的个数,答案对 取模(warn
)。
。
性质
看成过河卒问题,则只需计算 一列的贡献,调用过河卒问题公式可计算贡献次数。比如数字 对 贡献是 。最后的数的确切值即 。
考虑在 进制下末尾 的个数如何刻画,可以证明奇质因子的个数一定小于质因子 的个数*,故按照 分类讨论:
B | Prime |
---|
2 | 2 |
3 | 3 |
4 | |
5 | 5 |
6 | |
7 | 7 |
8 | |
9 | |
10 | |
你要找最大的 使得, ,所以如果是本身是质数则直接取自己就行,如果是 则取 , 则取 做,如果是 则取 做,答案取 $ \lfloor \frac{m}{c} \rfloor $ 就行。
思路
接下来开始做题。
现在题目是:找到 的给定质因子 的个数。
那么改写为 , 为 含 的个数,枚举,。
这时候注意看 自变量只有 ,把组合数暴力拆开就是一个关于 的多项式,次数至多(因为是模意义下)是 ,求和就是次数为 的多项式,我们用拉插来求出这个多项式,复杂度就是 的,当然这个复杂度没有计算逆元的 ,所以总复杂度就是 。
据说此时有神秘矩乘做法,但是很非人类了。
细节
如果是 则取 做,答案要取 $ \lfloor \frac{m}{c} \rfloor $ ,但是我们要取模,考虑怎么做向下取整。
考虑同余,令 ,最后我们要的答案就是 ,即 。, 是好做的。
代码
补充证明
- 结果 奇质因子的个数一定小于质因子 的个数: