BSGS

求解满足 axb(modp)a^x\equiv b\pmod p 的最小 xxpp 是质数)

分块?设分块大小为 tt

考虑 i[0,nt],j[1,t]i\in[0,\left\lceil\dfrac{n}{t}\right\rceil],j\in[1,t]axa^x 可以表示成 aitja^{it-j}

aitjb(modp)a^{it-j}\equiv b\pmod p

转换一下

aitbaj(modp)a^{it}\equiv ba^j\pmod p

预处理出所有的 bajba^j 存到一个 map / unordered_map 中,在枚举 i in range[1, n/t] 判断 aita^{it} 是否和某个元素 bajba^j 相等,答案即为 itjit-j

复杂度 O(t+nt)O(t+\left\lceil\dfrac{n}{t}\right\rceil) ,当 ttn\sqrt{n} 时 复杂度 O(n)O(\sqrt n)


exBSGS

求解满足 axb(modp)a^x\equiv b\pmod p 的最小 xxaapp 可能不互质)

想办法使 apa\perp p

d1=gcd(a,p)d_1=\gcd(a,p) ,若 d1bd_1\nmid b 则原方程无解(裴蜀定理),否则方程变为ad1ax1bd1(modpd1)\dfrac{a}{d_1}\cdot a^{x-1}\equiv\dfrac{b}{d_1}\pmod {\dfrac{p}{d_1}}

一直除,直到 apd1d2d3...dka\perp \frac{p}{d_1d_2d_3...d_k}

D=i=1kdiD=\prod\limits_{i=1}^kd_i

akDaxkbD(modpD)\dfrac{a^k}{D}\cdot a^{x-k}\equiv \dfrac bD\pmod{\dfrac pD}

axkbD(akD)1(modpD)a^{x-k}\equiv \dfrac bD\cdot \left(\dfrac{a^k}{D}\right)^{-1}\pmod{\dfrac pD}

用 BSGS 求就是了(记得答案加上 kk

不排除答案小于 kk ,所以在构造 apa\perp p 时记得判断一下当前的 i=1kdi\prod\limits_{i=1}^{k'}d_i 是否等于当前的 b/i=1kdib /\prod\limits_{i=1}^{k'}d_i ,相等的话答案就是 kk'