【数论】BSGS
BSGS
问题引入
我们需要解决 \(a^x \equiv b \ (\bmod \ M)\) 的一个解 \(x\),其中 \(a, p\) 互质。
分析
首先,如果有解,那么解一定在 \([0, p]\) 这个区间内,根据抽屉原理,\(a^x \bmod p\) 只会有 \(p - 1\) 个取值,故 \([0, p]\) 中至少会存在两个相同余数的数,即一定存在一对 \(i, j\) 满足 \(a^i\equiv a^j \ (\bmod \ M)\),那么在 \(i\) 之后,\(a^i \bmod \ M, a^{i + 1} \bmod \ M, \cdots a^{j} \bmod \ M\) 这些数会循环出现,故如果有解,那么解一定在 \([0, p]\) 这个区间内。
我们考虑把 \(x\) 进行拆分,\(x=qm-p\),其中 \(m=\left\lfloor\sqrt{x}\right\rfloor+1\),\(q \in [1, m]\),\(p \in [0, m]\)。
显然,\(qm-p\) 可以表示出 \(0 \sim m\) 中的所有数。
我们把原式修改一下得到 \(a^{qm-p} \equiv b \ (\bmod \ M)\),\(a^{qm} \equiv b \times a^{p} \ (\bmod \ M)\)
我们发现 \(q\) 与 \(p\) 没有关系了,考虑先 \(O(\sqrt{x})\) 枚举 \(p\),把 \((b \times a^p) \bmod M\) 放入哈希表(map 也行),然后再 \(O(\sqrt{x})\) 枚举 \(a^{qm}\),找到最小的 \(q\) 满足 \(a^{qm} \bmod M\) 在哈希表中出现过,那么 \(qm+p\) 就是最小的答案。
扩展 BSGS
问题引入
我们要解决的还是 \(a^x\equiv b \ (\bmod \ p)\) 这个问题,只是不满足 \(a\) 与 \(p\) 互质。
分析
若 \(a\) 与 \(p\) 互质,那么就会存在逆元,可以将 \(x\) 分解为 \(qm - p\) 来求解,所以我们要想办法让 \(a, p\) 变得互质。
我们考虑把这个式子转化为不定方程,\(a^x -yp = b\),首先,我们求出 \(d_1=\gcd(a, p)\),然后整个式子都除以 \(d_1\),若 \(b\) 与 \(d_1\) 互质,那么就无解,否则我们继续求出 \(d_2=\gcd(a, p)\),一直进行下去,直到 \(a\) 与 \(p\) 互质。
假设进行了 \(k\) 次,最后得到式子就是 \(\dfrac{a^k}{\prod\limits_{i=1}^{k}d_i}\times a^{x-k}-\dfrac{yp}{\prod\limits_{i=1}^{k}d_i}=\dfrac{b}{\prod\limits_{i=1}^{k}d_i}\),其中 \(a\) 与 \(p\) 互质。
我们再化为同余方程的形式,\(\dfrac{a^k}{\prod\limits_{i=1}^{k}d_i}\times a^{x-k}\equiv \dfrac{b}{\prod\limits_{i=1}^{k}d_i} \ (\bmod \dfrac{p}{\prod\limits_{i=1}^{k}d_i})\),显然,求出 \(\dfrac{a^k}{\prod\limits_{i=1}^{k}d_i}\) 的逆元,然后直接移到右边,直接用 BSGS 来解决,然后最后把答案加上 \(k\) 即可。
注意,不保证答案小于 \(k\) 的情况,故在消因子前做一下 \(O(k)\) 枚举,直接验证 \(a^i \equiv b \ (\bmod \ p)\),就能避免这种情况。