把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

exCRT小记

众所周知 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 了。

submission

posted @ 2023-03-15 18:11  275307894a  阅读(37)  评论(0)    收藏  举报
浏览器标题切换
浏览器标题切换end