1. 本质
实际上,扩展中国剩余定理(后简称Ex_CRT
)就是中国剩余定理(后简称CRT
)的升级版,功能比CRT
强,时间复杂度也差不多,还比CRT
好理解,直接单调队列它
(可能由于码风问题,我的)Ex_CRT
容易出一些玄学BUG,从某种意义上讲,还不如写CRT
来的快
让我们回顾一下CRT
的一般形式:
{ x ≡ a 1 ( m o d b 1 ) x ≡ a 2 ( m o d b 2 ) ⋯ x ≡ a n ( m o d b n ) \begin{cases}x\equiv a_1\pmod{b_1}\\x\equiv a_2\pmod{b_2}\\\cdots\\x\equiv a_n\pmod{b_n}\end{cases} ⎩ ⎨ ⎧x≡a1(modb1)x≡a2(modb2)⋯x≡an(modbn)
其中 b 1 , b 2 , ⋯ , b n b_1,b_2,\cdots,b_n b1,b2,⋯,bn 均两两互质
而Ex_CRT
能解决没有互质限制的同余方程组
2. 求法
考虑数学归纳法
假设我们已经解决了前面 i − 1 i-1 i−1 个方程,设得到的最小整数解为 x i − 1 x_{i-1} xi−1,并设 lcm { b 1 , b 2 , ⋯ , b i − 1 } = L i − 1 \operatorname{lcm}\{b_1,b_2,\cdots,b_{i-1}\}=L_{i-1} lcm{b1,b2,⋯,bi−1}=Li−1
显然,我们可以得到前 i − 1 i-1 i−1 个方程的通解: x i − 1 + k × L i − 1 x_{i-1}+k\times L_{i-1} xi−1+k×Li−1
将这个通解带入第 i i i 个方程中:
( x i − 1 + k × L i − 1 ) ≡ a i ( m o d b i ) (x_{i-1}+k\times L_{i-1})\equiv a_i\pmod{b_i} (xi−1+k×Li−1)≡ai(modbi)
这本质上就是一个二元一次方程,用Ex_gcd
即可解决
如果有解,那么,我们就可以得到 x i , L i x_i,L_i xi,Li,就可以继续推下去;反之,说明前 i − 1 i-1 i−1 个方程不能和第 i i i 个方程同时成立,原方程无解
顺带提一句,Ex_CRT
的模数应该是
L
n
L_n
Ln