中国剩余定理,扩展中国剩余定理与扩展卢卡斯定理

中国剩余定理

中国剩余定理,又称孙子定理,是目前所有定理中唯一用中国命名的定理

首先来看这样一道小学数学题

  • 有一个数 x x x x % 3 = 2 x\%3=2 x%3=2 x % 5 = 3 x\%5=3 x%5=3 x % 7 = 2 x\%7=2 x%7=2
    求最小满足三个式子的 x x x 的值

这道题用数学的写法就是这样的

{ x ≡ 2 ( m o d 3 ) x ≡ 3 ( m o d 5 ) x ≡ 2 ( m o d 7 ) \begin{cases} x\equiv 2\pmod 3\\ x\equiv 3\pmod 5\\ x\equiv 2\pmod 7 \end{cases} x2(mod3)x3(mod5)x2(mod7)

求解这个线性方程组

那时欧几里得还没出世,所以没有欧几里得定理

我们首先来考虑这样的方程组

{ x ≡ 1 ( m o d 3 ) x ≡ 0 ( m o d 5 ) x ≡ 0 ( m o d 7 ) \begin{cases} x\equiv 1\pmod 3\\ x\equiv 0\pmod 5\\ x\equiv 0\pmod 7 \end{cases} x1(mod3)x0(mod5)x0(mod7)
{ x ≡ 0 ( m o d 3 ) x ≡ 1 ( m o d 5 ) x ≡ 0 ( m o d 7 ) \begin{cases} x\equiv 0\pmod 3\\ x\equiv 1\pmod 5\\ x\equiv 0\pmod 7 \end{cases} x0(mod3)x1(mod5)x0(mod7)
{ x ≡ 0 ( m o d 3 ) x ≡ 0 ( m o d 5 ) x ≡ 1 ( m o d 7 ) \begin{cases} x\equiv 0\pmod 3\\ x\equiv 0\pmod 5\\ x\equiv 1\pmod 7 \end{cases} x0(mod3)x0(mod5)x1(mod7)

我们可以知道 x x x 35 35 35 的倍数

所以设 y = x 35 y=\frac{x}{35} y=35x

35 y ≡ 1 ( m o d 3 ) 35y\equiv 1\pmod 3 35y1(mod3)

2 y ≡ 1 ( m o d 3 ) 2y\equiv 1\pmod 3 2y1(mod3)

可得 y = 2 y=2 y=2

x = 70 x=70 x=70

我们列出三个方程的式子

{ 2 y ≡ 1 ( m o d 3 ) y ≡ 1 ( m o d 5 ) y ≡ 1 ( m o d 7 ) \begin{cases} 2y\equiv 1\pmod 3\\ y\equiv 1\pmod 5\\ y\equiv 1\pmod 7 \end{cases} 2y1(mod3)y1(mod5)y1(mod7)

y = { 2 , 1 , 1 } y=\{2,1,1\} y={2,1,1} x = { 70 , 21 , 15 } x=\{70,21,15\} x={70,21,15}

a n s = 2 × 70 + 3 × 21 + 2 × 15 = 23 ( m o d 3 × 5 × 7 ) ans=2\times 70+3\times21+2\times15=23\pmod {3\times 5\times 7} ans=2×70+3×21+2×15=23(mod3×5×7)

这是三个方程的答案

那么我们可以 从特殊到一般

推广到 r r r 个式子

给定这个方程组

{ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) x ≡ a 3 ( m o d m 3 ) ⋯ x ≡ a n ( m o d m n ) \begin{cases} x\equiv a_1\pmod {m_1}\\ x\equiv a_2\pmod {m_2}\\ x\equiv a_3\pmod {m_3}\\ \cdots\\ x\equiv a_n\pmod {m_n} \end{cases} xa1(modm1)xa2(modm2)xa3(modm3)xan(modmn)

其中 ∀ { i , j } \forall \{i,j\} {i,j} m i ⊥ m j m_i\bot m_j mimj

M = ∏ r i = 1 m i M=\prod^{i=1}_rm_i M=ri=1mi

考虑构造

x ≡ 1 ( m o d m i ) x\equiv 1\pmod {m_i} x1(modmi)

x = M / m i × y x=M/m_i\times y x=M/mi×y

则只需要求

( M / m i ) y ≡ 1 ( m o d m i ) (M/m_i)y\equiv 1\pmod {m_i} (M/mi)y1(modmi)

逆元求一下即可

扩展 Lucas 定理

给定三个数 n , m , p n,m,p n,m,p

C n m ( m o d p ) C^m_n\pmod p Cnm(modp)

p = p 1 a 1 p 2 a 2 p 3 a 3 ⋯ p=p_1^{a_1}p_2^{a_2}p_3^{a_3}\cdots p=p1a1p2a2p3a3

轻松得出线性方程组

{ C n m ( m o d p 1 a 1 ) C n m ( m o d p 2 a 2 ) ⋯ C n m ( m o d p n a n ) \begin{cases} C^m_n\pmod {p_1^{a_1}}\\ C^m_n\pmod {p_2^{a_2}}\\ \cdots\\ C^m_n\pmod {p_n^{a_n}} \end{cases} Cnm(modp1a1)Cnm(modp2a2)Cnm(modpnan)

然后用中国剩余定理求解即可

举个例子:

假设我们要求 C n m ( m o d p k ) C^m_n\pmod {p^k} Cnm(modpk)

展开来为

n ! m ! ( n − m ) ! ( m o d p k ) \frac{n!}{m!(n-m)!}\pmod {p^k} m!(nm)!n!(modpk)

a a a 为对于 m ! m! m! ( n − m ) ! (n-m)! (nm)! p p p 的逆元

gcd ⁡ ( a , p ) = 1 \gcd(a,p)=1 gcd(a,p)=1

题目不能保证, 所以不一定有解

那就换一个式子

n ! p x m ! p y ( n − m ) ! p z p x − y − z ( m o d p k ) \frac{\frac{n!}{p^x}}{\frac{m!}{p^y}\frac{(n-m)!}{p^z}}p^{x-y-z}\pmod {p^k} pym!pz(nm)!pxn!pxyz(modpk)

展开来就是

n ! p x p y m ! p z ( n − m ) ! p x p y p z ( m o d p k ) \frac{n!}{p^x}\frac{p^y}{m!}\frac{p^z}{(n-m)!}\frac{p^x}{p^yp^z}\pmod {p^k} pxn!m!py(nm)!pzpypzpx(modpk)

约分后等价于上面的式子

其中 x , y , z x,y,z x,y,z 分别表示 n ! , m ! , ( n − m ) ! n!,m!,(n-m)! n!,m!,(nm)! p p p 因子的含量

问题进一步简化,求

n ! p x ( m o d p k ) \frac{n!}{p^x}\pmod {p^k} pxn!(modpk)

n ! = { 1 ⋅ 2 ⋅ ⋯ ⋅ n } { p ⋅ 2 p ⋅ 3 p ⋅ ⋯ ⋅ } n!=\{1·2·\cdots ·n\}\{p·2p·3p·\cdots·\} n!={12n}{p2p3p}

也就是

n ! = ∏ i p ≤ n i = 1 i p × ∏ n i = 1 , i ≠ 0 ( m o d p ) i n!=\prod^{i=1}_{ip\leq n}ip\times \prod^{i=1,i≠0\pmod p}_{n}i n!=ipni=1ip×ni=1,i=0(modp)i

∵ [ 1 , n ] ∵ [1,n] [1,n] 中有 ⌊ n p ⌋ \lfloor\frac{n}{p}\rfloor pn p p p 的倍数

等价于

n ! = p ⌊ n p ⌋ ∏ ⌊ n p ⌋ i = 1 i × ∏ i = 1 , i ≠ 0 ( m o d p ) i = 1 i n!=p^{\lfloor\frac{n}{p}\rfloor}\prod^{i=1}_{\lfloor\frac{n}{p}\rfloor}i\times \prod^{i=1}_{i=1,i≠0\pmod p}i n!=ppnpni=1i×i=1,i=0(modp)i=1i

等价于

n ! = p ⌊ n p ⌋ ( ⌊ n p ⌋ ) ! n!=p^{\lfloor\frac{n}{p}\rfloor}(\lfloor\frac{n}{p}\rfloor)! n!=ppn(pn)!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值