中国剩余定理
注:文章所以未知数都定义为自然数。
前言
好好好,开始上衔接了。第一节数学课老师给我们了一道题“一些猴子吃桃子,如果有2个猴子剩1个桃子;如果有3个猴子剩2个桃子;如果有5个猴子剩4个桃子;如果有7个猴子剩6个桃子;如果有11个猴子剩10个桃子。” 一眼顶针被评价为 lyz 狂喜——中国剩余定理练习题。
正文
前置芝士
取模
众所周知。在除法中 a ÷ b = c ⋯ d a \div b = c \cdots d a÷b=c⋯d 于是我们新定义一个符号 “%” 称之为模(取余)。对于 x ÷ y = z ⋯ n x \div y = z \cdots n x÷y=z⋯n 则有 x % y = n x \% y = n x%y=n。
众所周知。余数具有可加性,所以取模亦有可加性,具体的形如:
a % b = n , c % b = m a \% b = n , c \% b = m a%b=n,c%b=m
( a + c ) % b = ( n + m ) % b (a + c) \% b = (n + m) \%b (a+c)%b=(n+m)%b
模系与同余
就是在同意取模下含义的数的式子例如同余,同余形如 a = b ( m o d c ) a = b \pmod c a=b(modc) 。对于 x % y = n x \% y = n x%y=n 则有 x = n ( m o d y ) x = n \pmod y x=n(mody)。
逆元
对于 a 在模数为 m 的模系中的逆元记为 a’ ,代表 a ⋅ a ′ = 1 ( m o d m ) a \cdot a' = 1 \pmod m a⋅a′=1(modm)。
逆元于模系是绑定的,只有在模系中才会出现逆元。
根据定义式子,我们可以将逆元感性理解为倒数。
引例
其实前言中的练习题就是同余式子 ”如果有2个猴子剩1个桃子“。
将问题简化为 ”如果有2个猴子剩1个桃子;如果有3个猴子剩2个桃子;如果有5个猴子剩4个桃子“。
我们设:桃子的数量为 n n n。
原式子相当于 n ÷ 2 = k ⋯ 1 n \div 2 = k \cdots 1 n÷2=k⋯1
则这个式子可以写为 n = 1 ( m o d 2 ) n = 1 \pmod 2 n=1(mod2)
同理每个式子可以写为同余的形式如:
n
=
2
(
m
o
d
3
)
n = 2 \pmod 3
n=2(mod3)
n
=
4
(
m
o
d
5
)
n = 4 \pmod 5
n=4(mod5)
我们要构造一个数满足所有条件,可以利用前面的可加性,将问题差分。
假设 :
a
=
x
(
m
o
d
2
)
a = x \pmod 2
a=x(mod2)
a
=
y
(
m
o
d
3
)
a = y \pmod 3
a=y(mod3)
b
=
n
(
m
o
d
2
)
b = n \pmod 2
b=n(mod2)
b
=
m
(
m
o
d
3
)
b = m \pmod 3
b=m(mod3)
则 :
a
+
b
=
x
+
n
(
m
o
d
2
)
a + b = x + n \pmod 2
a+b=x+n(mod2)
a
+
b
=
y
+
m
(
m
o
d
3
)
a + b = y + m \pmod 3
a+b=y+m(mod3)
我们可以考虑将原有的三个条件拆成三个数相加,让每个数满足其中一个同余式。
如下表:
下面问题就转化为了如何构造一个数,使得其模系为其他要求的式子的模数同余 0 ,而对满足其中的一个式子。
考虑模系的意义,我们将一个数 x x x 可以质因数拆解为 p 1 ⋅ p 2 ⋯ p n p_1 \cdot p_2 \cdots p_n p1⋅p2⋯pn
如果 其有一个因子为模数则,这个数个在这个同余系中一定同余 0 0 0 。
如果这样不好理解,则可以理解为
因为 对于 x ÷ y = z ⋯ n x \div y = z \cdots n x÷y=z⋯n 则有 x % y = n x \% y = n x%y=n。
当 y 是 x 因子则式子一定整除,即余数 n = 0 n = 0 n=0
所以在同余系中为0。
所以我们可以让构造的第一个数 中包好 p 1 = 3 , p 2 = 5 p_1 = 3 , p_2 = 5 p1=3,p2=5
这样不管这个数乘任何自然数,都会满足使得其它式子同余 0.
我们考虑如和实现满足其中一个式子,还是第一个式子。
根据逆元的定义,我们考虑先让构造的数 同余 2 余 1 再成乘以 1。
所以我们就可以构造出第一个数了
S = 2 ⋅ 3 ⋅ 5 S = 2 \cdot 3 \cdot 5 S=2⋅3⋅5
A 1 = S 2 ⋅ ( S 2 ) ′ ( m o d 2 ) ⋅ 1 A_1 = \frac S 2 \cdot (\frac S 2)'\pmod 2 \cdot 1 A1=2S⋅(2S)′(mod2)⋅1
于是我们构造出第一个数。
二三个数以此类推分别为:
A
2
=
S
3
⋅
(
S
3
)
′
(
m
o
d
3
)
⋅
2
A_2 = \frac S 3 \cdot (\frac S 3)'\pmod 3 \cdot 2
A2=3S⋅(3S)′(mod3)⋅2
A
3
=
S
5
⋅
(
S
5
)
′
(
m
o
d
5
)
⋅
4
A_3 = \frac S 5 \cdot (\frac S 5)'\pmod 5 \cdot 4
A3=5S⋅(5S)′(mod5)⋅4
最后我们将三个数求和
则构造出一个合法的数字满足这道题所有条件。
通解
我们将问题普遍化
对于同余式
k
=
a
1
(
m
o
d
m
1
)
k = a_1 \pmod {m_1}
k=a1(modm1)
k
=
a
2
(
m
o
d
m
2
)
k = a_2 \pmod {m_2}
k=a2(modm2)
⋯
\cdots
⋯
k
=
a
n
(
m
o
d
m
n
)
k = a_n \pmod {m_n}
k=an(modmn)
还是将答案拆分 n 个数的和, A i A_i Ai 满足第 i 个式子
设 S = m 1 ⋅ m 2 ⋯ m n S = m_1 \cdot m_2 \cdots m_n S=m1⋅m2⋯mn
例如第一个式子 A 1 A_1 A1 使其除了第一个式子都满足同余 0,所以使 A 1 = S m 1 ⋅ p A_1 = \frac S {m_1} \cdot p A1=m1S⋅p
使得其满足第一个式子则令 A 1 = S m 1 ⋅ ( S m 1 ) ′ ( m o d m 1 ) ⋅ a 1 A_1 = \frac S {m_1} \cdot (\frac S {m_1})' \pmod {m_1} \cdot a_1 A1=m1S⋅(m1S)′(modm1)⋅a1
对于第 i 个式子则为:
A i = S m i ⋅ ( S m i ) ′ ( m o d m i ) ⋅ a i A_i = \frac S {m_i} \cdot (\frac S {m_i})' \pmod {m_i} \cdot a_i Ai=miS⋅(miS)′(modmi)⋅ai
最终构造的答案就是将所有数加起来,形式化的说
A = ∑ i = 1 n S m i ⋅ ( S m i ) ′ ( m o d m i ) ⋅ a i A = \sum ^ n _ {i=1} \frac S {m_i} \cdot (\frac S {m_i})' \pmod {m_i} \cdot a_i A=∑i=1nmiS⋅(miS)′(modmi)⋅ai
要特别注意的是,这个式子的成立要满足 任意两个模数互质,否则不能使用上述方法构造 每一个 A i A_i Ai,如果不互质则可以利用拓展剩余定理(待填坑)。