离散对数

给定 \(a,b,p\),求出最小的 \(x\),使 \(a^x\equiv b\pmod p,p\le10^9\)

a 和 p 互质的情况

模板题:[TJOI2007] 可爱的质数/【模板】BSGS

\(s=\lceil\sqrt p\rceil,x=rs-c\)

\(a^{rs-c}\equiv b\pmod p\)

\((a^s)^r\equiv b^c\pmod p\)

将所有 \(b^c\bmod p\;(0\le c<s)\) 保存到 mapunordered_map 中,枚举 \(r\) 查询即可

时间复杂度 \(O(s\log s)=O(\sqrt p\log p)\)\(O(s)=O(\sqrt p)\)

代码

一般情况

模板题:P4195 【模板】扩展 BSGS/exBSGS

方法 1

\(d_1=\gcd(a,p)\),若 \(d_1\nmid b\) 则无解,否则方程变为 \(\frac{a}{d_1}a^{x-1}\equiv\frac b{d_1}\pmod {\frac p{d_1}}\)

重复上述操作直到 \(a\)\(\frac pd\) 互质(其中 \(d\) 为每次的 \(d\) 的积)

此时方程变为 \(\frac{a^k}da^{x-k}\equiv \frac bd\pmod {\frac p{d}}\)

转化为 \(a^{x-k}\equiv \frac bd{\left(\frac{a^k}d\right)}^{-1}\pmod {\frac p{d}}\),用 \(a\)\(p\) 互质时的方法求解即可

需要特判 \(x\le k\) 的情况

方法 2

参考

可证答案上界为 \(2\varphi(p)\),因此类似一般情况根号平衡,令 \(t=\left\lceil\sqrt{2\varphi(p)}\right\rceil\)

\(a^{pt}\bmod p\;(0\le p\le t)\) 存入哈希表,值相同的保留 \(p\) 最小的两个,枚举 \(ba^q\) 并检验两值,若合法则 \(pt-q\) 为一合法解

可证这样一定不会漏最小解

时间复杂度 \(O(\sqrt p)\)

代码

参考

  1. \(\text{12.11 math1.pdf \; \;by Tx\_Lcy}\)
posted @ 2025-04-06 19:13  Hstry  阅读(6)  评论(0)    收藏  举报