中國剩余定理 CRT
正常版本CRT
要解的是一個很容易的東西
保證\(m_1,m_2...m_n\)之間兩兩互質,求最小的\(x\)。
設\(M=\prod m_i\)。
首先我們確定一點,我們求出了任意一個滿足條件的\(x\)之后,只需要對其模\(M\)就是最終的答案。
因為\(M\)是所有數的\(lcm\)。
考慮一下,對於每一個\(a_i\),如果我們能夠求出一個數\(x_i\)
滿足它是其他所有\(m\)的乘積,即\(M_i=M/m_i\)的倍數,並且\(x_i\equiv 1(mod\ m_i)\)
也就是對於任意一個\(x_i\),滿足\(x_i\equiv 0(mod\ m_k),k\ne i\),\(x_i\equiv 1(mode\ m_i)\)
那么最終的答案就會是\(\sum(a_ix_i)mod\ M\)。
深思熟慮的考慮如何求出\(x_i\),
因為\(x_i\)是\(M_i\)的倍數,所以\(x_i=kM_i\equiv 1(mod\ m_i)\)
所以\(k\)是\(M_i\)在模\(m_i\)意義下的逆元。所以\(x_i\)就是\(k\)的\(M_i\)倍,注意最終統計入結果的模數是\(M\)。
所以,\(CRT\)的結果就是\(\sum (a_ik_iM_i)mod\ M\)。
不正常版本CRT
要求的東西同上,不保證所有\(m_i\)互質。
我們肯定不能像上面那樣堆在一起求了。
換個方法,假設我們只有兩個方程。\(x\equiv a_1(mod\ m_1),x\equiv a_2(mod\ m_2)\)
怎么算答案?
顯然是要滿足:\(x=x_1m_1+a_1=x_2m_2+a_2\),並且\(x\)最小。
顯然是\(x_1,x_2\)都要盡可能的小。
所以\(x_1m_1+x_2m_2=a_2-a_1\)
那么\(exgcd\)可以求解最小的\(x_1\),然后就可以求得\(x=x_1m_1+a_1\)
這樣子就可以同時滿足這兩個方程了,因為方程有多個,
所以我們把這兩個方程合並,假設當前求出來的解是\(x'\)
那么我們就新加入一個方程\(x\equiv x'(mod\ lcm(m_1,m_2))\)就好了。