整除和同余相关理论

下面的所有知识均属数论范畴。


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/pCn 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=kiPrimekiα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!(nm)!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(nm)!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 OIwiki,我们用 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×810×11×13×14×16×17 (mod kiαi)
形式化地,有:( t ∈ Z + t \in Z_+ tZ+
∏ 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值