前言:更符合人类的做法,比大多数题解少一个 k

MegaFactorial

给定 f(n,k)。有 f(0,k)=1,f(n,0)=n,f(n,k)=f(n1,k)×f(n,k1)

计算 f(n,k)b 进制下末尾 0 的个数,答案对 109+9 取模(warn)。

n[1,109],k[1,16],b[2,10]

性质

  1. 看成过河卒问题,则只需计算 f(n,0) 一列的贡献,调用过河卒问题公式可计算贡献次数。比如数字 i(in)f(n,k) 贡献是 i(ni+k1k1)。最后的数的确切值即 i=1ni(ni+k1k1)

  2. 考虑在 b 进制下末尾 0 的个数如何刻画,可以证明奇质因子的个数一定小于质因子 2 的个数*,故按照 B 分类讨论:

BPrime
22
33
422
55
62×3
77
823
932
102×5

你要找最大的 m 使得,Bm | ans ,所以如果是本身是质数则直接取自己就行,如果是 6 则取 310 则取 5 做,如果是 pc 则取 p 做,答案取 $ \lfloor \frac{m}{c} \rfloor $ 就行。

思路

接下来开始做题。

现在题目是:找到 i=1ni(ni+k1k1) 的给定质因子 p0=2357 的个数。

那么改写为 i=1n(ni+k1k1)v(i)v(i)ip0 的个数,枚举p0tt1logp0nj=1np0t(njp0t+k1k1)

这时候注意看 (njp0t+k1k1) 自变量只有 j,把组合数暴力拆开就是一个关于 j 的多项式,次数至多(因为是模意义下)是 k1,求和就是次数为 k 的多项式,我们用拉插来求出这个多项式,复杂度就是 k2logn 的,当然这个复杂度没有计算逆元的 log,所以总复杂度就是 k2log2n

据说此时有神秘矩乘做法,但是很非人类了。

细节

如果是 pc 则取 p 做,答案要取 $ \lfloor \frac{m}{c} \rfloor $ ,但是我们要取模,考虑怎么做向下取整。

考虑同余,令 m=ac+b,最后我们要的答案就是 a,即 a=mbc。,b=mmodc 是好做的。

代码

补充证明

  • 结果 ans 奇质因子的个数一定小于质因子 2 的个数: