【数论】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\) 就是最小的答案。

code

扩展 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)\),就能避免这种情况。

code

posted @ 2020-08-27 16:29  chzhc  阅读(202)  评论(0编辑  收藏  举报
levels of contents