數論之中國剩余定理
歐幾里得算法是一種求解兩非負數最大公約數的過程,它本質上就是執行輾轉相除法。
int gcd(int a,int b) { return b==0?a:gcd(b,a%b); }
可證明最終得到的結果(設為\(r_n\))就是所求最大公約數:第一步證明\(r_n\)是兩數約束,第二步證明\(r_n\)可被兩數任意約數整除。
貝祖定理:對于不全為 0 的自然數\(a,b\),必然存在整數\(x,y\)(不唯一)滿足等式\(ax+by=gcd(a, b)\)。使用擴展歐幾里得算法能夠證明。進而可知,若\(a,b\)互素,那么存在整數\(x,y\)滿足等式\(ax+by=1\)。更進一步,若\(a,b\)互素,總可以找到一個比\(b\)小的非負數\(x\),使得\(ax=1(\bmod b)\)成立。
中國剩余定理是從一個方程求解過程總結出的定理。
有同余方程組:\(\left\{\begin{array}{l}{x \equiv a_{1}\left(\bmod m_{1}\right)} \\ {x \equiv a_{2}\left(\bmod m_{2}\right)} \\ {\cdots} \\ {x \equiv a_{k}\left(\bmod m_{k}\right)}\end{array}\right.\),其中\(m_1, m_2, \cdots, m_k\)為兩兩互素整數,求\(x\)的最小非負整數解。
求解:
- 令\(M=\prod_{i=1}^{k} m_{i}\),即\(M\)是所有\(m_i\)的最小公倍數;
- 由于\(m_i\)兩兩互素,所以\(\frac{M}{m_{i}}\)與\(m_i\)亦互素,根據上述貝祖定理推論,可有\(\frac{M}{m_{i}} t_{i} \equiv 1\left(\bmod m_{i}\right)\);
- 則有一個解為\(x=\sum_{i=1}^{k} a_{i} \frac{M}{m_{i}} t_{i}\),通解為\(x+i * M(i \in Z)\),特別的,最小非負整數解為\((x \% M+M) \% M\)。
證明:
- 由\(\frac{M}{m_{i}} t_{i} \equiv 1\left(\bmod m_{i}\right)\)兩邊同乘\(a_i\)得:\(a_i\frac{M}{m_{i}} t_{i} \equiv a_i\left(\bmod m_{i}\right)\);
- 又\(\forall k \downarrow=i, a_{i} \frac{M}{m_{i}} t_{i} \equiv 0\left(\bmod m_{k}\right)\);
- 將兩式代入原方程,易得[其中一解]\(x=\sum_{i=1}^{k} a_{i} \frac{M}{m_{i}} t_{i}\)。
推論:基于上述同余方程組,對于不同的\(\left(a_{1}, a_{2} \dots, a_{k}\right)\)集合,\(0 \leqslant x_{最小非負值} \leqslant M\)取值亦各不相同,此一一對應關系可用于推導歐拉函數。
參考資料:

浙公網安備 33010602011771號