(擴充套件)BSGS

2022-09-09 20:24:28 字數 2463 閱讀 9835

\(\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,我們就得到了乙...