1. 程式人生 > 其它 >[學習筆記]擴充套件中國剩餘定理

[學習筆記]擴充套件中國剩餘定理

凡事都有偶然的湊巧,結果卻又如宿命的必然。

把之前的寫的東西拉過來。

考慮我們顯然可以用一次 \(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)}}\)