\(\texttt\),即大步小步法,用於求解關於 \(x\) 的形如 $a^x \equiv n(\bmod p) $ 的高次不定方程的最小非負整數解,其中 \(a, b, p\) 為已經給出的常數且 \(a, p\)互質。
眾所周知bsgs=北上廣深=拔山蓋世
設 \(x = a\lceil \sqrt \rceil - b\),其中 \(0 \leq a,b \leq \lceil\sqrt\rceil\)
得 \(a^ \rceil - b} \equiv n(\bmod p)\)
因為 \(a, p\) 互質,所以在模 \(p\) 意義下進行含 \(a\) 的乘除運算沒有影響
\(\therefore a^ \rceil} \equiv na^b(\bmod p)\)
考慮用雜湊表預處理出所有 \(na^b\) 的可能取值以及其對應的 \(b\)
再列舉 \(a\) 的所有取值,假設雜湊表中存在 \(a^ \rceil}\) 到 \(t\) 的對映,則最小非負整數解為 \(i \lceil \sqrt \rceil - t\)
如果遍歷 \(a\) 的所有取值都無法找到最小非負整數解,則原方程無解
時間複雜度為 \(o(\sqrt)\),用map
則多 \(log\) 倍常數。
注意在模 \(p\) 意義下,如果 \(n = 1\) 或 \(p = 1\),則原方程的最小非負整數解為 \(0\);如果 \(a = 0\),若 \(n = 0\),原方程的最小非負整數解為 \(1\),反之原方程無解
注意map
的時間複雜度為 \(log\) 但不會發生雜湊衝突,\(\mathcal(1)\) 的unordered_map
可能有雜湊衝突。卡常可以考慮手寫雜湊
p3846 [tjoi2007] 可愛的質數/【模板】bsgs
#include #include #include using namespace std;
typedef long long ll;
mapmp;
ll fpow(ll a, ll b, ll mod)
return res;
}ll bsgs(ll a, ll n, ll p)
int main()
擴充套件 \(\texttt\)(\(\tt exbsgs\)),用於求解關於 \(x\) 的形如 \(a^x \equiv n(\bmod p)\) 的高次同餘方程的最小非負整數解,其中 \(a, b, p\) 為常數且 \(a, p\)不一定互質。
考慮將方程化為某種形式,使得 \(a, p\) 互質。
原方程可以等價地寫成 \(a^x + kp = n, k \in \mathbb\)
設 \(\gcd(a, p) = d\),根據裴蜀定理知,原方程有解當且僅當 \(d \mid n\),反之原方程無解。
若原方程有解,則其可進一步化為 \(\frac + k \frac = \frac\)
即 \(a^ \frac + k \frac = \frac\)
此時 \(a^ \rightarrow a^x, \frac \rightarrow p, \frac \rightarrow n\)
遞迴重複若干次,使得 \(\gcd(a, p) = 1\)
設此時共遞迴了 \(k\) 次,\(k\) 次遞迴中的 \(d\) 乘積為 \(d^\)
則 \(a^ \frac} \equiv \frac}(\bmod \frac})\ (1)\)
用 \(\tt bsgs\) 求出方程 \(a^ \equiv \frac}(\bmod \frac})\) 的最小非負整數解 \(x^\)
則此時原方程的最小非負整數解為 \(x^ + k\)
注意 \((1)\) 式中有係數 \(\frac}\) 需要乘上,需要作為引數傳入bsgs
函式
詳見**
p4195 【模板】擴充套件 bsgs/exbsgs
#include #include #include using namespace std;
typedef long long ll;
ll a, p, n;
mapmp;
ll gcd(ll a, ll b)
ll fpow(ll a, ll b, ll mod)
return res;
}ll bsgs(ll a, ll n, ll p, ll ad)
ll exbsgs(ll a, ll n, ll p)
ll ans = bsgs(a, n, p, ad);
if (ans == -1)
return -1;
return ans + cnt;
}int main()
return 0;
}
BSGS學習筆記
用於求 a x equiv b pmod 高次方程的最小正整數解 x 其中 c 為素數 引理1 a equiv a i pmod p p 為素數,即 a i 在模 p 的意義下會出現迴圈節 注 varphi p 可能不是最小迴圈節 因為 a equiv 1 pmod p 則 a equiv 1 pm...
演算法 BSGS演算法
bsgs演算法用於求解關於x的模方程 a x equiv b mod p p為質數 相當於求模意義下的對數。思想 由費馬小定理,a equiv 1 mod p 在p 1次方後開始迴圈,所以若原方程有解,x in 0,p 1 設 x i m j 有 a equiv b mod p 移項得 i equi...
BSGS 大步小步演算法
bsgs被用於求解離散對數,即同餘方程 a x equiv b pmod 求 x 的最小非負整數解。保證 a perp p 互質 首先,我們根據費馬小定理,有 a equiv 1 pmod 則顯然有 a equiv a x pmod 即 a equiv a x pmod 那麼顯然 x,我們就得到了乙...