原根
设(g)为模数(p)的一个原根,
那么(g^x,g^{x+1}...g^{x+p-2})(连续(p-1)项)在模(p)意义下分别对应([1,p-1])中的每一项。
质数一定有原根,考虑求原根。
首先由费马小定理,有(g^{p-1} equiv 1(mod p))。
我们暴力枚举(g),然后枚举(p-1)的一个质因子(delta),若(g^{frac{p-1}{delta}} equiv 1(mod p)),则(g)不是原根。
否则这个(g)就是(p)的原根。
很好理解,如果(g^{frac{p-1}{delta}} equiv 1(mod p)),则说明(g^xequiv 1(mod p))的解多于一个,与原根定义矛盾。
一般来说,原根都很小,所以暴力枚举(g)是没有问题的(我见过的最大的原根为(g=221))。
原根的常见作用:乘法转加法。
在模(p)意义下,
求出原根(g)后建立映射关系:(g^t tin [0 , p-2] o t),那么有(g^a*g^b = g^{(a+b)\% (p-1)})。
N次剩余
求(x^N equiv n(mod p))的所有解(x),其中(p)为一个素数。
若(n = 0),显然(x = 0)为唯一解,下面讨论(x
eq 0)的解法:
首先求得(p)的原根(g)。
然后利用(BSGS)求出(g^t equiv n(mod p))。
那么现在问题变为:(g^{Nx\%(p-1)} equiv g^t (mod p))。
所以有:(Nxequiv t(mod p-1)),直接使用扩展欧几里得得解,复杂度(O(sqrt{p}))。
有解性同 (BSGS)和扩欧算法 的有解性。
二次剩余
求(x^2 equiv n(mod p))的一个解(x),其中(p)为一个奇素数。
若(n = 0),显然(x = 0)为唯一解,下面讨论(x
eq 0)的解法:
引理1:(n)有二次剩余的条件为(n^{frac{p-1}{2}} equiv 1(mod p))
根据费马小定理,我们有(n^{p-1} equiv 1(mod p))。
那么显然(n^{frac{p-1}{2}} equiv pm 1(mod p))。
假设可以找到一个(x_0),满足(x_0^2 equiv n(mod p)),由于(x_0^{p-1} equiv 1(mod p))
又((x_0)^{(p-1)} equiv (n^{frac{1}{2}})^{p-1}),所以有(n^{frac{p-1}{2}} equiv 1(mod p))。
引理2:找到(p)的原根(g),其中(g^a equiv n(mod p)),那么(g^{frac{a}{2}})即(n)在模(p)意义下的二次剩余。
有(g^a equiv n(mod p)),结合引理1:((g^a)^{frac{p-1}{2}} equiv g^{frac{a}{2}(p-1)} equiv 1(mod p))。
根据原根的定义,我们有(g^{p-1} equiv 1(mod p)),且(x=p-1)为唯一解。
所以((p-1) | (frac{a}{2}(p-1))),消去(p-1)后有(1|frac{a}{2})。
所以(a)一定为偶数。
显然(x_0 = sqrt{g^a} = g^{frac{a}{2}})为(n)在模(p)意义下的二次剩余。
我们可以归纳出一个(O(sqrt{p}))的算法:
(1) 首先求出(p)的原根(g)。
(2) 快速幂判断(n)在模(p)意义下是否有二次剩余。
(3) 使用(BSGS)求出(g^aequiv n(mod p))的解(a),(a)一定为偶数。
(4) (x_0 = g^{frac{a}{2}})即为(n)在模(p)意义下的二次剩余。
继续来看。
所以我们先随机(rand)一个数(a),满足(a^2 - n)没有二次剩余,期望次数为(2)。
定义(delta = sqrt{a^2 - n})。
类似复数,我们定义一个新的数域,即所有数可以表示为(x + ydelta),((x,yleq p-1))。
引理3:(delta^{p-1} equiv -1(mod p))
由于(a^2 - n)没有二次剩余,所以((a^2 - n)^{frac{p-1}{2}}
eq 1(mod p))。
又((a^2-n)^{p-1} equiv 1(mod p)),所以((a^2 - n)^{frac{p-1}{2}} equiv - 1(mod p))。
我们有(delta^2 = a^2 - n)。
所以(delta^{p-1} = (delta^{2})^{frac{p-1}{2}} = (a^2 - n)^{frac{p-1}{2}} equiv -1(mod p))。
引理4:((a + delta)^{p+1} = n (mod p)),即((a+delta)^{frac{p+1}{2}})为(n)在模(p)意义下的二次剩余。
((a+delta )^{p} = sum_{i=0}^p inom{p}{i} a^i delta^{p-i} (mod p))。
除了第(0)、第(p)项,(inom{p}{i})的分子包含(p),这个(p)肯定不会被分母消掉,所以一定被(p)整除。
所以((a+delta)^p = a^p + delta^p)。
我们有(a^{p-1} equiv 1(mod p)),(delta^{p-1} equiv -1(mod p))。
所以((a+delta)^{p} = a - delta)。
所以((a+delta)^{p+1} = (a-delta)(a+delta) = a^2 - delta^2 = a^2 -(a^2 - n) = n)。
又(p)为一个奇素数,所以(x_0 = (a+delta)^{frac{p+1}{2}})为(n)在模(p)意义下的二次剩余。
引理5:((a + delta)^{frac{p+1}{2}} equiv (x+ydelta) (mod p)),则(y = 0)。
根据代数基本定理,(n = (x + ydelta)^2)至多只会有两个解。
我们如果能够证明这两个解一定满足(y = 0),那么原命题自然成立。
((x+ydelta)^2 = x^2 + 2xydelta + y^2delta^2 = x^2 + y^2(a^2-n)+ 2xydelta equiv n(mod p))。
注意到同余式的右边不存在(delta)。
所以有(2xyequiv 0(mod p))。
我们使用反证法,设(x = 0),那么((x+ydelta)^2 = y^2(a^2-n) equiv n(mod p))。
我们已知(a^2 -n)没有二次剩余,且(y^2)显然有二次剩余。所以(y^2(a^2-n))没有二次剩余。
所以同余式左边(y^2(a^2-n))不存在二次剩余,而右边(n)存在二次剩余。
所以矛盾,假设不成立。
所以(y = 0)。
即((a+delta)^{frac{p+1}{2}} = x_0)是一个整数解,即我们所求。
根据上述,可以得到一个(O(logp))求二次剩余的算法:
(1) 判断(n)在模(p)意义下是否存在二次剩余。
(2) 随机得到一个(a),满足(a^2-n)不存在二次剩余。
(3) 重载运算((x_1+y_1delta)(x_2+y_2delta) = (x_1x_2 + (a^2-n)y_1y_2) + (x_1y_2+x_2y_1) delta)
(4) 快速幂得到((a+delta)^{frac{p+1}{2}} equiv (x + ydelta) (mod p))。
(5) (x_0 = x)即(n)在模(p)意义下的二次剩余。
至此问题解决,虽然上面的这些东西实际中并没有什么用(QwQ)......