中國剩余定理


寫在前面

Q:中國剩余定理很難嗎?

A:就是個求解同余方程組的東東

(話說 \(OI\) 只要能理解應用就好吧,證明是不是可以先放一放)因為我太菜了

Update 2021/04/11:終於理解中國剩余定理,還是tcl


正文

《孫子算經》中有這么一道題:

“今有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二,問物幾何?”

翻譯一下就是:已知一個正整數模3余2,模5余3,模7余2,求這個數是幾?

寫成數學語言,就是求解同余方程組

\[\begin{aligned} & x \equiv 2 \pmod 3 \\ & x \equiv 3 \pmod 5 \\ & x \equiv 5 \pmod 7 \\ \end{aligned} \]

乍一看,這不很簡單蠻,隨便帶近兩個數試試不就行了

但是你現在可以直接觀察並且數據小,如果數據大了呢,同余方程組不只是三個呢?

這就需要我們的“中國剩余定理”登場了

中國剩余定理公式

設正整數 \(m_1, m_2, m_3, ···,m_k\) 兩兩互素,則同余方程組

\[\begin{aligned} & x \equiv a_1 \pmod {m_1} \\ & x \equiv a_2 \pmod {m_2} \\ & x \equiv a_3 \pmod {m_3} \\ & ··· \\ & x \equiv a_k \pmod {m_k} \end{aligned} \]

有整數解。並且在模 \(M = m_1 \times m_2 \times ··· \times m_k\) 下解是唯一的,解為

\[x \equiv (a_1 M_1 M_1^{-1} + a_2 M_2 M_2^{-1} + ··· + a_k M_k M_k^{-1}) mod \ \ M \]

其中 \(M_i = M / m_i\) , 而 \(M_i^{-1}\)\(M_i\)\(m_i\) 的逆元

中國剩余定理拓展

(求解模數不互質情況下的同余方程組)

普通中國剩余定理要求所有的 \(m_i\) 互素,那么如果不互素呢?怎么求解同余方程組?

這種情況可以考慮兩兩合並,假設合並如下兩個方程:

\[x = a_1 + m_1 x_1 \]

\[x = a_2 + m_2 x_2 \]

那么得到:

\[a_1 + m_1 x_1 = a_2 + m_2 x_2 \Rightarrow m_1 x_1 + m_2 x_2 = a_2 - a_1\]

我們需要求出一個最小的 \(x\) 使它滿足:

\[x = a_1 + m_1 x_1 = a_2 + m_2 x_2 \]

那么 \(x_1\)\(x_2\) 的值要僅可能的小,於是我們又擴展歐幾里得算法求出 \(x_1\) 的最小整數解,將它代回 \(a_1 + m_1 x_1\) ,得到 \(x\) 的一個特解 \(x^{,}\) ,當然也是最小整數解。

所以 \(x\) 的通解一定是 \(x^{,}\) 加上 \(lcm(m_1,m_2) \times k\) 這樣才能保證 \(x\)\(m_1\)\(m_2\) 的余數是 \(a_1\)\(a_2\) 。由此,我們把這個 \(x^{,}\) 當做新的方程的余數,把 \(lcm(m_1,m_2) \times k\) 當做新的方程的模數。(這一段是關鍵

合並完成:

\[x \equiv x^{,} \pmod {lcm(m_1,m_2)} \]

大數翻倍法

復雜度有保證,碼量短小精湛!

詳見這篇博文


想學中國剩余定理很久了,第一次聽說是在夏令營的時候,看到同宿舍某大佬的課程表上有這個名詞,感覺挺高大上的,前幾天忙着期中考咕咕咕了,如今終於有機會更一篇關於它的筆記了,開心>-<!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM