[學習筆記]擴充套件中國剩餘定理
阿新 • • 發佈:2021-12-24
凡事都有偶然的湊巧,結果卻又如宿命的必然。
我們則有\(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)}\)
把之前的寫的東西拉過來。
考慮我們顯然可以用一次 \(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)}}\)