天降暴雨,被困的車友應當如何自救
前言
今天把數學一本通往後看了一頁,發現是中國剩餘定理。看完之後,一竅不通,於是自己在 奇妙的網路 上搜索資源,緩慢地學會了。
不會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在不 moda[ i ]的情況下(畢竟如果 mod a[i]就成 1 了)是所有的 a[ j ],j≠ i的倍數。
也就是說,對於所有的方程組我們取出這樣一個 b[ i ] * m[ i ] * m[ i ]-1
為什麼呢?我們挨個檢查每個方程式。
對於方程式 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
結語
數學苦手應該好好學數學。
從洛谷上搬運過來,為了自己的審美改格式,改了半個多小時,頭要掉了......
同時也發現了一些部落格園的功能,以後的格式應該會更用可讀性的。