[算法学习] 中国剩余定理

中国剩余定理

对于\(n\)\(x \bmod a_i = b_i\)方程,我们常用\(CRT\)或者\(ExCRT\)进行求解。

\(a_i\)两两互质的时候,两种方法均可使用,但如果\(a_i\)不能两两互质,那么只能用\(ExCRT\).

CRT

我们另\(mul = \prod_{i=1}^n a_i\),\(m_i=\frac{mul}{a_i}\)

那么我们可以轻松的知道\(m_i\)只有在\(\bmod a_i\)的情况下不为0

我们尝试构造,另\(m_i \times s_i = 1 (\bmod a_i)\)

然后根据上面的结论,答案就是\(\sum_{i = 1}^n {m_i s_i b_i}\)

ExCRT

我们可以先考虑两个方程的解的情况。

\(x \bmod a_1 = b_1\)
\(x \bmod a_2 = b_2\)

我们把方程转化一下

\(x - a_1 y_1 = b_1\)
\(x - a_2 y_2 = b_2\)

两个柿子相减

我们可以得到
\(a_1 * y_1 - a_2 * y_2 = b_2 - b_1\)

同样我们可以通过exgcd然后取模得到最小的y_1,从而得到\(x = b_1 +a_1y_1\)

然后两个方程合并成了\(x \bmod (lcm(a_1, a_2)) = b_1 +a_1y_1\)

然后不断合并就行了

posted @ 2020-09-03 09:50  Hock  阅读(172)  评论(0编辑  收藏  举报