原根算法与剩余定理

原根

\(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\)和扩欧算法 的有解性。ui

二次剩余

\(x^2 \equiv n(mod\ p)\)的一个解\(x\)其中\(p\)为一个奇素数
\(n = 0\),显然\(x = 0\)为惟一解,下面讨论\(x\neq 0\)的解法:spa

引理1:\(n\)有二次剩余的条件为\(n^{\frac{p-1}{2}} \equiv 1(mod\ p)\)io

根据费马小定理,咱们有\(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)\)class

引理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\)意义下的二次剩余。block

咱们能够概括出一个\(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\)意义下的二次剩余。math

继续来看。
因此咱们先随机\(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)......

相关文章
相关标签/搜索