众所周知 CRT 只能处理模数两两互质的情况,因为它要算逆元。
那么如果模数两两不互质,有没有办法呢?答案是有的。
我们先来考虑两个同余方程,设为 \(x\equiv b_1\pmod{a_1},x\equiv b_2\pmod {a_2}\)。
如果我们能把这两个同余方程合并成一个同余方程,那么 CRT 是不是就可以扩展了呢?
实际上是可以扩展的。把同余式写成等式,变成
\[x=a_1p+b_1=a_2q+b_2 \]把辅助的 \(x\) 去掉,移项,得到 \(a_1p-a_2q=b_2-b_1\)。
根据裴蜀定理,这个方程有解的条件是 \(\gcd(a_1,a_2)\mid (b_2-b_1)\)。如果没有解,那么原同余方程组应该就没有解;否则我们解出一组可行的 \(p,q\),那么可以得到新的同余方程组:\(x\equiv a_1p+b_1 \pmod{\operatorname{lcm}(a_1,a_2)}\)。
于是可以直接这样合并,时间复杂度 \(O(n\log V)\),其中 \(n\) 是同余方程组的个数,\(V\) 是值域。
[NOI2018] 屠龙勇士
首先可以用 multiset 求出每回合对应的攻击力,那么现在问题转化成解若干个形如 \(c_ix\equiv b_i\pmod{a_i}\) 的问题。
我们发现这个和 exCRT 能干的事情还有点差距,不妨先令 \(a_i,b_i,c_i\) 同除 \(\gcd(a_i,c_i)\) ,然后求出 \(c_i\) 的逆元之后把 \(c\) 除过去,就可以直接 exCRT 了。
标签:1p,方程,pmod,exCRT,同余,小记,equiv From: https://www.cnblogs.com/275307894a/p/17219516.html