数论随笔(updating)
数论笔记
BSGS(大步小步法)
求解形如\(a^x \equiv b (mod p)\)的方程的\(x\)解\((gcd(a,b) = 1)\)
令\(x = m\sqrt{p}-n(m,n\leq \sqrt{p})\),那么\(a^{m\sqrt{p}-n}\equiv b(mod p)\),将两边同乘一个\(a^n\),可得\(a^{m\sqrt{p}}\equiv ba^n(mod p)\)
然后先枚举\(n\),用哈希表把右边存下来,再枚举\(m\),看有无能与它同余的\(n\)值,就可以知道\(x\)。
若要求最小解,哈希表中相同哈希值的那一位取\(n\)的最大值,然后在比较的时候取一下\(max\)值就好了。
总结:数论中常用的构造法的一个鲜明的例子,将枚举\(p\)次构造成两边各枚举\(\sqrt{p}\)次,以后数论中要常想到用这种构造法。
扩展BSGS
假如上面的\(a,p\)不互质该怎么办呢?
辣么我们通过不断除去\(gcd(a,p)\),来使它们变得互质,具体而言:
首先求\(gcd(a,p)=c_i\),然后可以得到\(\frac{a}{c_i}a^{x-1}\equiv \frac{b}{c_i}(mod\ \frac{p}{c_i})\)
然后,\(\frac{a}{c_i}a^{x-1}\)与\(\frac{p}{c_i}\)可能依然不互质,那么我们依葫芦画瓢,再除去一个\(gcd(a,\frac{p}{c_i})\)。
如果仍然不互质,就一直除到两者互质为止,假设我们除了\(k\)次,那么我们可得
\(\frac{a^k}{\prod_{i=1}^{k} c_i}a^{x-k}\equiv \frac{b}{\prod_{i=1}^{k} c_i}(mod\ \frac{p}{\prod_{i=1}^{k} c_i})\)
然后\(\frac{a^k}{\prod_{i=1}^{k} c_i}\)是个可以算出来的常量,我们把它除到右边去就好了,因为\(\frac{p}{\prod_{i=1}^{k} c_i}\)与\(a\)互质,所以有逆元,可以除。
当然,\(x\)可能小于\(k\),我们\(O(\sqrt{p})\)的时间直接枚举看看在小于\(k\)的范围内有没有解就好了。