BSGS与二次剩余
BSGS
$Big\ Step\ Giant\ Step$,大步小步法,一种在$O(\sqrt{p})$内求解方程$a^x\equiv b (mod\ p)$的算法。
先考虑$p$为质数的情况。
令$x=im-j$,$m=\lceil \sqrt{p} \rceil$(注意是上取整,要保证大步比小步大),则$a^{im-j}\equiv b(mod\ p)$。
移项,有$(a^m)^i\equiv ba^j(mod\ p)$。
首先$0-i$枚举$j$,将$ba^j$存入哈希表。在$1-m$枚举$i$,计算$(a^m)^i$并查询是否存在$ba^j$与之相等,由于大步比小步大,所以找到的一个满足条件的$im-j$就是答案。
$p$不为质数的情况:exBSGS
二次剩余
http://blog.miskcoo.com/2014/08/quadratic-residue
https://blog.csdn.net/l_0_forever_lf/article/details/79052135
https://blog.csdn.net/qq_35649707/article/details/78922508
二次剩余有$O(\log^2 n)$的优秀做法,但这里只介绍$O(\sqrt{p})$的奇质数做法。
二次剩余是指:求解$x^2\equiv a(mod\ p)$
先介绍几个概念(不一定用的上):
1.勒让德符号:$\left(\frac a p \right)$为0时表示$a \mod\ p=0$,为1时表示$a$是$p$的二次剩余(即存在模意义下平方根),为-1时表示不是。有定理(后面会证明):$$\left({\frac a p}\right) \equiv a^{\frac{p-1}{2}}(mod\ p)$$
2.p一共有$\frac{p+1}{2}$个二次剩余,$\frac{p-1}{2}$个非二次剩余。
因为$a^2\equiv (p-a)^2(mod\ p)$,故至多只有$\frac{p+1}{2}$个数存在平方根。
3.$(a+b)^p\equiv a^p+b^p(mod\ p)$。
下面证明定理一(以下省略$\mod\ p$):
充分性:$a^{\frac{p-1}{2}}\equiv (x^2)^{\frac{p-1}{2}}\equiv x^{p-1}$,由费马小定理得证。
必要性:考虑$a$在模$p$意义下的原根$g$,$a\equiv g^i$,则有$g^{\frac{i(p-1)}{2}}\equiv 1$,取$x=g^{\frac i 2}$即可。
证毕。同时我们也得到了一个$O(\sqrt{p})$求奇质数二次剩余的方法:先求出$a$的原根,再用$BSGS$求出$g^k\equiv 1$,则答案为$g^{\frac{k}{p-1}}$。