BSGS
$Big Step Giant Step$,大步小步法,一种在$O(sqrt{p})$内求解方程$a^xequiv b (mod p)$的算法。
先考虑$p$为质数的情况。
令$x=im-j$,$m=lceil sqrt{p}
ceil$(注意是上取整,要保证大步比小步大),则$a^{im-j}equiv b(mod p)$。
移项,有$(a^m)^iequiv 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^2equiv a(mod p)$
先介绍几个概念(不一定用的上):
1.勒让德符号:$left(frac a p ight)$为0时表示$a mod p=0$,为1时表示$a$是$p$的二次剩余(即存在模意义下平方根),为-1时表示不是。有定理(后面会证明):$$left({frac a p} ight) equiv a^{frac{p-1}{2}}(mod p)$$
2.p一共有$frac{p+1}{2}$个二次剩余,$frac{p-1}{2}$个非二次剩余。
因为$a^2equiv (p-a)^2(mod p)$,故至多只有$frac{p+1}{2}$个数存在平方根。
3.$(a+b)^pequiv 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$,$aequiv g^i$,则有$g^{frac{i(p-1)}{2}}equiv 1$,取$x=g^{frac i 2}$即可。
证毕。同时我们也得到了一个$O(sqrt{p})$求奇质数二次剩余的方法:先求出$a$的原根,再用$BSGS$求出$g^kequiv 1$,则答案为$g^{frac{k}{p-1}}$。