中国剩余定理

前言

今天把数学一本通往后看了一页,发现是中国剩余定理。看完之后,一窍不通,于是自己在 奇妙的网络 上搜索资源,缓慢地学会了。

不会LATEX(

思路

一般来说中国剩余定理需要求满足条件的最小值,很容易想到这样的值不止一个,所以就像求线性同余方程(实际上,中国剩余定理就是求特殊的线性同余方程组)的解一样,先找特殊解,然后利用通解公式找到最小正整数解。

声明

中国剩余定理可以简化为求一个 x,使得

x % a[ 1 ] == b[ 1 ]

x % a[ 2 ] == b[ 2 ]

......

x % a[ n ] == b[ n ]

设所有 a[ 1->n ] 的积为 a

设m[ i ] = tot / a[i]

m[ i ]-1 为 m[ i ] 在 (mod a[ i ]) 意义下的逆元

通解

看完第一篇题解之后,我对于通解为什么是 x + kb 产生了疑问。很多题解开篇就声明,没有给出解释,被我直接跳过了。但是这东西其实非常简单(所以正经题解不会解释)。

我们设当前已经得到了一个解 x,另外还有一个解是 y。

那么

x ≡ b[ i ] (mod a[ i ])

y ≡ b[ i ] (mod a[ i ])

所以

x ≡ y (mod a[ i ])

所以

(y - x) | a[ i ]

同理

(y - x) | a[ j ]

  而因为对于所有的 a[ i ] a[ j ],i ≠ j,a[ i ] a[ j ] 互质

  所以

(y - x) | a

也就是说

y = x + ka

构造特殊解

对于一个单独的方程来看

x ≡ b[ i ] (mod a[ i ])

我们可以用 一个 a[ i ] 的倍数加上一个 ≡ b[ i ] (mod a[ i ]) 的数字

考虑这个数字

b[ i ] ≡ b[ i ] * 1 ≡ b[ i ] * (m[ i ] * m[ i ]-1) (mod a[ i ])

而我们惊奇的发现,这个数字 b[ i ] * m[ i ] * m[ i ]-1 在不 mod a[ i ] 的情况下(毕竟如果 mod a[i] 就成 1 了)是所有的 a[ j ],j ≠ i 的倍数。

也就是说,对于所有的方程组我们取出这样一个 b[ i ] * m[ i ] * m[ i ]-1 并且相加,就可以得到一个特殊解 x。

为什么呢?我们挨个检查每个方程式。

对于方程式 i, 把 x 分解成 b[ i ] * m[ i ] * m[ i ]-1 和 b[ j ] * m[ j ] * m[ j ]-1,j ≠ i 的和。

对于这个和

我们发现每一项的 m[ j ] 中必然会包含一个因子 a[ i ],因为 m[ j ] 是 a 剥离出了 a[ j ],而没有剥离出 a[ i ]。所以,这个和为 a[ i ] 的倍数。

对于这个数

b[ i ] * m[ i ] * m[ i ]-1,已经提到过,在 (mod a[ i ]) 的意义下 ≡ b[ i ]。

两者结合,这正是我们一开始考虑的一个倍数和一个数字。

显然对于每个方程式 i,都可以像上述过程一样满足条件。故 x 可作为特殊解。

求最小正整数解

x % a

结语

学会了中国剩余定理,以及加强了对于同余知识的掌握。

题外话

数学苦手应该好好学数学。

从洛谷上搬运过来,为了自己的审美改格式,改了半个多小时,头要掉了......

同时也发现了一些博客园的功能,以后的格式应该会更用可读性的。

posted @ 2021-07-28 13:04  imfkwk  阅读(157)  评论(0编辑  收藏  举报