如果你正在看這篇部落格,我就預設你會算乘法逆元了,如果你還不會,請看我的早期部落格:乘法逆元
有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二。問物幾何?——《孫子算經》
即求滿足以下條件的整數:除以3餘2,除以5餘3,除以7餘2。
宋朝數學家秦九韶於 1247 年《數書九章》卷
一、二《大衍類》對「物不知數」問題做出了完整系統的解答。上面具體問題的解答口訣由明朝數學家程大位在《演算法統宗》中給出:
三人同行七十希,五樹梅花廿一支,七子團圓正半月,除百零五便得知。
\[2 \times 70 + 3 \times 21 + 2 \times 15 = 233 = 2 \times 105 + 23
\],故答案為23。
我們管這種解決一元餘數方程組的最小整數解的方法叫做中國剩餘定理
中國剩餘定理的基本式為:
\[\beginx \equiv a_1 \pmod\\x \equiv a_2 \pmod\\x \equiv a_2 \pmod \\ …… \\ x \equiv a_n \pmod \end
\]我們可以從拆分子問題來試圖理解一下古人精妙的思路
假設我們要求3個數
\[n_1 , n_2 , n_3
\],它們分別滿足
\[\beginn_1 \equiv 2 \pmod\\n_2 \equiv 3 \pmod\\n_3 \equiv 2 \pmod \end
\]而且,我們分別讓另外兩個數是該式子模數的倍數
因為我們知道
\[a \mod b = c
\]\[( a + k \times b ) \mod b = c
\],所以
\[\begin( n_1 + n_2 + n_3 ) \mod 3 = 2 \\( n_1 + n_2 + n_3 ) \mod 5 = 3 \\
( n_1 + n_2 + n_3 ) \mod 7 = 2 \\
\end\]
我們就可以求解這個方程組,將
\[n_1,n_2,n_3
\]分別求解,最後的答案就是
\[n_1 + n_2 + n_3
\]我們就可以從5和7的倍數中,找乙個餘數為2的數即可求出
\[n_1
\]我們都知道
\[a \mod b = c
\]\[k \times a \mod b = k \times c
\],所以我們在求解
\[n_1 \mod 3 = 2
\]時,我們可以用到乙個小技巧,我們可以先求出在mod 3的意義下的逆元
\[n_1^
\],再乘上該式子的餘數2,即可求出乙個解
注意:在這裡的運算中,我們只是求出符合題意的乙個解,最後,我們只需
\[\mod 3 \times 5 \times 7
\]在中國剩餘定理的運算中,我們預設每個模數都兩兩互質,若不互質,則需要另乙個優化手段,在此不加以贅述,想要高階的同學請看參考文獻中的中國剩餘定理學習筆記
文章中的乘法逆元若不說明統一指乘法逆元中的最小正整數解
每日一板:p1495 【模板】中國剩餘定理(crt)/曹沖養豬
上**:
#includeusing namespace std;
typedef long long ll;
ll x,y;
void exgcd(ll a,ll b)
exgcd(b,a%b);
ll tx=x;
x=y;
y=tx-a/b*y;
}int n;
ll a[11],b[11];
ll a=1;
ll ans;
int main()
cout<
本文參考文獻:oi-wiki,中國剩餘定理學習筆記
中國剩餘定理 擴充套件中國剩餘定理
中國剩餘定理 對於求解一元不定方程組 的一種演算法叫做中國剩餘定理。又名孫子定理。其中m1,m2,m3.mk 為兩兩互質的整數,求x的最小非負整數解 令m mi 1 i n m是所有mi的最小公倍數 ti為同餘方程 ti m mi 1 mod mi 的最小非負整數解 則有乙個解 x ai m mi ...
中國剩餘定理
用來求解模數互質的同餘方程組,即求乙個數x,使得x除以n個模數分別為a1,a2,a3 an 注意這裡的除數必須要兩兩互質 得到n個餘數r1,r2,r3 rk。求這個數x.中國剩餘定理求的就是這個數x。求解過程 1 令p a1 s2 a3 an,ki p ai i從1到n 2 我們要找到這樣的數 di...
中國剩餘定理
中國剩餘定理介紹 在 孫子算經 中有這樣乙個問題 今有物不知其數,三三數之剩二 除以3餘2 五五數之剩三 除以5餘3 七七數之剩二 除以7餘2 問物幾何?這個問題稱為 孫子問題 該問題的一般解法國際上稱為 中國剩餘定理 具體解法分三步 找出三個數 從3和5的公倍數中找出被7除餘1的最小數15,從3和...