下面的所有知识均属数论范畴。
L u c a s Lucas Lucas 定理
当 p p p 为质数时有:
C n m m o d p = C n / p m / p ∗ C n m o d p m m o d p m o d p C_n^m \bmod p= C_{n / p}^{m / p} * C_{n~\bmod~p}^{m~\bmod~p} \bmod p Cnmmodp=Cn/pm/p∗Cn mod pm mod pmodp
代码就不贴了 (实际上是懒)。
如果 p p p 不为质数呢?
那么我们先用唯一分解定理将 p p p 分解:
p = ∑ k i ∈ P r i m e k i α i p = \sum_{k_i \in Prime} k_i^{\alpha_i} p=ki∈Prime∑kiαi
然后把原式拆分为若干个同余方程,最后用中国剩余定理合并即可。
现在我们讨论如何求 C n m m o d k i α i C_n^m \bmod k_i^{\alpha_i} Cnmmodkiαi,而 C n m = n ! m ! ( n − m ) ! C_n^m = \frac{n!}{m!(n - m)!} Cnm=m!(n−m)!n!,所以问题本质上是求阶乘的取模。
设我们要求的是 P ! m o d k i α i P! \bmod~k_i^{\alpha_i} P!mod kiαi,那么我们可以把 P ! P! P! 包含的所有 k i k_i ki 质因子取出,由于剩下的数与模数互质,所以我们就可以直接求逆元了。
所以最终要求的问题是求:
n ! k i β 1 m ! k i β 2 ⋅ ( n − m ) ! k i β 3 ⋅ k i β 1 − β 2 − β 3 m o d k i α i \frac{\frac{n!}{k_i^{\beta_1}}}{\frac{m!}{k_i^{\beta_2}} \cdot \frac{(n - m)!}{k_i^{\beta_3}}} \cdot k_i^{\beta_1 - \beta_2 - \beta_3}\bmod k_i^{\alpha_i} kiβ2m!⋅kiβ3(n−m)!kiβ1n!⋅kiβ1−β2−β3modkiαi
不过我们还是先从研究 P ! m o d k i α i P! \bmod~k_i^{\alpha_i} P!mod kiαi 开始。
同 O I − w i k i OI-wiki OI−wiki,我们用 22 ! m o d 3 2 22! \bmod 3^2 22!mod32 举例。
我们知道:
22 ! = 1 × 2 × 3 × 4 × 5 × 6 × 7 × 8 × 9 × 10 × 11 × 12 × 13 × 14 × 15 × 16 × 17 × 18 × 19 × 20 × 21 × 22. 22! = 1\times2\times3\times4\times5\times6\times7\times8\times9\times10\times11\times12\times13\times14\times15\times16\times17\times18\times19\times20\times21\times22. 22!=1×2×3×4×5×6×7×8×9×10×11×12×13×14×15×16×17×18×19×20×21×22.
我们把 3 3 3 的倍数提出来,化简一下有:
22 ! = 3 7 × ( 1 × 2 × 3 × 4 × 5 × 6 × 7 ) × ( 1 × 2 × 4 × 5 × 7 × 8 × 10 × 11 × 13 × 14 × 16 × 17 × 19 × 20 × 22 ) 22! = 3^7\times(1\times2\times3\times4\times5\times6\times7) \times(1\times2\times4\times5\times7\times8\times10\times11\times13\times14\times16\times17\times19\times20\times22) 22!=37×(1×2×3×4×5×6×7)×(1×2×4×5×7×8×10×11×13×14×16×17×19×20×22)
第一个部分是 k i k_i ki 的 ⌊ P k i ⌋ \lfloor\frac{P}{k_i}\rfloor ⌊kiP⌋ 次幂,这个部分只需要记录指数,不需要求具体的值;
第二个部分是 ⌊ P k i ⌋ ! \lfloor\frac{P}{k_i}\rfloor! ⌊kiP⌋!,可以递归求解;
第三个部分是 1 × 2 × 4 × 5 × 7 × 8 × 10 × 11 × 13 × 14 × 16 × 17 1\times2\times4\times5\times7\times8\times10\times11\times13\times14\times16\times17 1×2×4×5×7×8×10×11×13×14×16×17,仔细观察可以发现:
1 × 2 × 4 × 5 × 7 × 8 ≡ 10 × 11 × 13 × 14 × 16 × 17 ( m o d k i α i ) 1\times2\times4\times5\times7\times8 \equiv10\times11\times13\times14\times16\times17~(\bmod~k_i^{\alpha_i}) 1×2×4×5×7×8≡10×11×13×14×16×17 (mod kiαi)
形式化地,有:( t ∈ Z + t \in Z_+ t∈Z+)
∏ i = 1 , gcd ( i , k i ) = 1 k i α i i ≡ ∏ i = 1 , gcd ( i , k i ) = 1 k i α i ( i + t k i α i ) ( m o d k i α i ) \prod_{i = 1,\gcd(i, k_i) = 1}^{k_i^{\alpha_i}} i \equiv \prod_{i = 1,\gcd(i, k_i) = 1}^{k_i^{\alpha_i}} (i + tk_i^{\alpha_i}) ~(\bmod k_i^{\alpha_i}) i=1,gcd(i,ki)=1∏