原根算法与剩余定理
原根
设\(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^x\equiv 1(mod\ p)\)的解多于一个,与原根定义矛盾。
一般来说,原根都很小,所以暴力枚举\(g\)是没有问题的(我见过的最大的原根为\(g=221\))。
原根的常见作用:乘法转加法。
在模\(p\)意义下,
求出原根\(g\)后建立映射关系:\(g^t\ t\in [0 , p-2]\ \ \to \ \ t\),那么有\(g^a*g^b = g^{(a+b)\% (p-1)}\)。
N次剩余
求\(x^N \equiv n(mod\ p)\)的所有解\(x\),其中\(p\)为一个素数。
若\(n = 0\),显然\(x = 0\)为唯一解,下面讨论\(x\neq 0\)的解法:
首先求得\(p\)的原根\(g\)。
然后利用\(BSGS\)求出\(g^t \equiv n(mod\ p)\)。
那么现在问题变为:\(g^{Nx\%(p-1)} \equiv g^t (mod\ p)\)。
所以有:\(Nx\equiv t(mod\ p-1)\),直接使用扩展欧几里得得解,复杂度\(O(\sqrt{p})\)。
有解性同 \(BSGS\)和扩欧算法 的有解性。
二次剩余
求\(x^2 \equiv n(mod\ p)\)的一个解\(x\),其中\(p\)为一个奇素数。
若\(n = 0\),显然\(x = 0\)为唯一解,下面讨论\(x\neq 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^a\equiv 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 + y\delta\),(\(x,y\leq p-1\))。
引理3:\(\delta^{p-1} \equiv -1(mod\ p)\)
由于\(a^2 - n\)没有二次剩余,所以\((a^2 - n)^{\frac{p-1}{2}} \neq 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 \binom{p}{i} a^i \delta^{p-i}\ (mod\ p)\)。
除了第\(0\)、第\(p\)项,\(\binom{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+y\delta)\ (mod\ p)\),则\(y = 0\)。
根据代数基本定理,\(n = (x + y\delta)^2\)至多只会有两个解。
我们如果能够证明这两个解一定满足\(y = 0\),那么原命题自然成立。
\((x+y\delta)^2 = x^2 + 2xy\delta + y^2\delta^2 = x^2 + y^2(a^2-n)+ 2xy\delta \equiv n(mod\ p)\)。
注意到同余式的右边不存在\(\delta\)。
所以有\(2xy\equiv 0(mod\ p)\)。
我们使用反证法,设\(x = 0\),那么\((x+y\delta)^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_1\delta)(x_2+y_2\delta) = (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 + y\delta)\ (mod\ p)\)。
(5) \(x_0 = x\)即\(n\)在模\(p\)意义下的二次剩余。
至此问题解决,虽然上面的这些东西实际中并没有什么用(QwQ)......