中国剩余定理
中国剩余定理,又称孙子定理,是目前所有定理中唯一用中国命名的定理
首先来看这样一道小学数学题
- 有一个数
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} ⎩⎪⎨⎪⎧x≡2(mod3)x≡3(mod5)x≡2(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}
⎩⎪⎨⎪⎧x≡1(mod3)x≡0(mod5)x≡0(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}
⎩⎪⎨⎪⎧x≡0(mod3)x≡1(mod5)x≡0(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}
⎩⎪⎨⎪⎧x≡0(mod3)x≡0(mod5)x≡1(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 35y≡1(mod3)
则 2 y ≡ 1 ( m o d 3 ) 2y\equiv 1\pmod 3 2y≡1(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} ⎩⎪⎨⎪⎧2y≡1(mod3)y≡1(mod5)y≡1(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} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x≡a1(modm1)x≡a2(modm2)x≡a3(modm3)⋯x≡an(modmn)
其中 ∀ { i , j } \forall \{i,j\} ∀{i,j} 有 m i ⊥ m j m_i\bot m_j mi⊥mj
M = ∏ r i = 1 m i M=\prod^{i=1}_rm_i M=r∏i=1mi
考虑构造
x ≡ 1 ( m o d m i ) x\equiv 1\pmod {m_i} x≡1(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)y≡1(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!(n−m)!n!(modpk)
设 a a a 为对于 m ! m! m! 与 ( n − m ) ! (n-m)! (n−m)! 的 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(n−m)!pxn!px−y−z(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(n−m)!pzpypzpx(modpk)
约分后等价于上面的式子
其中 x , y , z x,y,z x,y,z 分别表示 n ! , m ! , ( n − m ) ! n!,m!,(n-m)! n!,m!,(n−m)! 中 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!={1⋅2⋅⋯⋅n}{p⋅2p⋅3p⋅⋯⋅}
也就是
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!=ip≤n∏i=1ip×n∏i=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!=p⌊pn⌋⌊pn⌋∏i=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!=p⌊pn⌋(⌊pn⌋)!