設\(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)}\)。算法
求\(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)......