BSGS學習筆記

2022-03-17 02:21:02 字數 1467 閱讀 2302

用於求\(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 \pmod p\)

所以 \(a^\times a^ \equiv 1 \pmod p\)

即 \(a^\) 為 \(a^\) 模 \(p\) 意義下的逆元

$ \frac}} \equiv a^\times a^ \equiv a^\times 1 \equiv a^ \pmod p$

即 \(a^ \equiv a^ \pmod p\)

又因為 $i \bmod \varphi(p)=i-k\times (p-1) $

且 \(p\) 為素數,\(i-k\times (p-1)=i-k\times\varphi(p)\)

則 \(a^ \equiv a^ \equiv a^ \pmod p\)

qed根據引理1我們可知只需要列舉至多 \(\varphi(c)\) 個數就能知道方程的解,若列舉完後發現無解,則整個方程無解

考慮構造乙個 \(m\),使得 \(m=\lceil\sqrt\rceil\)

\(x=k\times m-q\),原方程轉化為 \(a^ \equiv b \pmod\)

繼而得到 $ a^ \equiv b\times a^ \pmod$

到了這一步,我們先考慮列舉 \(b*a^\) 中的 \(q\),至多 \(\sqrt\) 次,然後我們把得到的值存入乙個hash表中

接著我們開始列舉 $ a^$ 中的 \(m\),則兩次列舉出來的式子的兩兩組合正好可以得到所有 $a \in [1,x] $,若遇到兩次列舉出來的值相等,則輸出答案,退出迴圈。

code:

#include#include#includeusing namespace std;

#define ll long long

#define int ll

#define hash_mod 76799777ll

maphash;

ll qpow(ll a,ll b,ll c)

ll bsgs(ll a,ll b,ll c)

base=qpow(a,sizes,c);

ll tmp=1;

for(ll i=1;i<=sizes;i++)

return -1;

}ll p,b,n;

signed main()

ll ans=bsgs(b,n,p);

if(ans!=-1) printf("%lld",ans);

else printf("no solution");

}

學習筆記 BSGS 演算法

bsgs baby step giant step 即大步小步演算法,常用於求解離散對數問題。該演算法可以在 o sqrt p 的時間複雜度內求解 a x equiv b pmod p 我們將求解的答案 x 設為 km c c m 的形式,即 a equiv b pmod p 在 a perp p ...

學習筆記 省選演算法 數論 BSGS演算法

浙江省神犇協會 神犇1號 zjoi 2018的題大家都ak了嗎?全體神犇 ak了!神犇1號 7號神犇,你認識那個弱弱的xyz32768嗎?神犇7號 是的,我認識!我現在就去d他!x省y市 神犇7號 告訴你,zj的神犇協會從此有乙個規矩 第1天,協會派我,也就是7號神犇來d人,第2天,協會就派49號神...

(擴充套件)BSGS

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 l...