离散对数问题
有一类问题形式如下:
给定同余方程 $a^x\equiv b\quad(\mod m)$ ,求其最小解。
这样的方程解起来并不简单,最暴力的想法自然是一个一个试,于是对于这类“不可做”问题考虑分块的做法。下面我们将分两种情况讨论:
$(a,m)=1$
$a$ 和 $m$ 互质的情况下问题就比较好处理了。
设 $x=A\sqrt m+B$
则原来方程可化为:
$$
\begin{aligned}
a^{A\sqrt m +B}&\equiv b\quad(\mod m)\
\implies
a^B&\equiv ba^{-A\sqrt m}\quad(\mod m)
\end{aligned}
$$
于是我们把 $a^B$ 存入哈希表中,然后 $O(\sqrt n)$ 找到 $A$ 的取值。
Discrete Logging
1 |
|
[SDOI2011] 计算器
1 |
|
$(a,m)\neq1$
我们既然已经有了 $a$ 和 $m$ 互质情况下的做法,那只需要将 $a$ 和 $m$ 化为互质的即可。
对于 $a^x\equiv b\quad(\mod m)$ 设 $(a,m)=g$
如果 $g\not\mid b$ 那么无解。
如果 $g\mid b$ 那么原方程可化为 $(a’g)^x\equiv b’g\quad(\mod m’g)$
同余式两边同除以 $g$ 得: $(a’)^{x-1}\equiv b’(a’)^{-1}\quad(\mod m’)$
注意每次新的 $x$ 都是原来的 $x-1$ ,故需要记录操作次数 $cnt$
如果 $b’(a’)^{-1}\equiv1\quad(\mod m’)$ 或 $m’=1$ 则解为 $cnt$
不断执行上述操作,直至 $(a,m)=1$
注意特判 $a\equiv0\quad(\mod m)$ 时的情况
[SPOJ] Mod
1 |
|