[学习笔记]扩展中国剩余定理

把之前的写的东西拉过来。

考虑我们显然可以用一次 \(nlogn\) 的过程,求出如果可以砍第 \(i\) 头,他将使用的刀的攻击力。
于是我们转为求这样一个方程组:
\(\left\{ \begin{aligned} m_1a_1\equiv b_1\pmod{q_1}\\ m_2a_2\equiv b_2\pmod{q_2}\\ .....\\ m_3a_3\equiv b_3\pmod{q_3}\\ \end{aligned} \right.\)

我们发现他并不好解。
那么我们就只能考虑使用\(exgcd\),显然如果有方程没解,则全局无解。
我们单独拉一个出来看\(ma\equiv b\pmod p\)
我们则有\(ma + kp = b\)
设解为\(S_a,S_p\)
通解公式有:
那么就有\(a = S_a + k\frac{p}{gcd(m,p)}\)
于是我们转为了这个方程:\(a\equiv S_a\pmod{\frac{p}{gcd(m,p)}}\)
于是我们可以使用\(exCRT\)求解。
\(exCRT\)说白了就是合并这个同余方程。
\(a\equiv C_1\pmod {P_1}\)
\(a\equiv C_2\pmod {P_2}\)
所以有
\(x = C_1 + P_1 y_1\)
\(x = C_2 + P_2 y_2\)
所以有:
\(P_1y_1 = P_2y_2 + C_1 - C_2\)
同除这个\(gcd(P_1,P_2)\)
那么有\(\frac{P_1}{gcd(P_1,P_2)}y_1 = \frac{P_2}{gcd(P_1,P_2)}y_2 + \frac{C_1 - C_2}{gcd(P_1,P_2)}\)
\(\frac{P_1}{gcd(P_1,P_2)}y_1 \equiv \frac{C_1 - C_2}{gcd(P_1,P_2)}\pmod{\frac{P_2}{gcd(P_1,P_2)}}\)
此时系数和膜数互质。
\(y_1 \equiv \frac{C_1 - C_2}{gcd(P_1,P_2)} * inv(\frac{P_1}{gcd(P_1,P_2)},\frac{P_2}{gcd(P_1,P_2)})\pmod{\frac{P_2}{gcd(P_1,P_2)}}\)
此时
\(y_1 = \frac{C_1 - C_2}{gcd(P_1,P_2)} * inv(\frac{P_1}{gcd(P_1,P_2)},\frac{P_2}{gcd(P_1,P_2)}) + k\frac{P_2}{gcd(P_1,P_2)}\)

带回原式,有:
\(x \equiv C_1 + P_1(\frac{(C_1 - C_2)}{gcd(P_1,P_2)} * inv(\frac{P_1}{gcd(P_1,P_2)},\frac{P_2}{gcd(P_1,P_2)})\bmod \frac{P2}{gcd(P_1,P_2)}) \pmod {\frac{P_1P_2}{gcd(P_1,P_2)}}\)

posted @ 2021-12-24 16:24  fhq_treap  阅读(54)  评论(0编辑  收藏  举报