高次同餘方程
阿新 • • 發佈:2021-08-08
高次同餘方程,可分為兩類。
下面來分別介紹這兩類方程和解法
一類是
若\(a \perp p\)求一個非負整數解?
首先因為\(a \perp p\),我們由尤拉定理得
而
\[ a^{0} \equiv 1 \ (mod \ p) \]因此不難得出\(0 - \varphi(p)\)是個循壞節,我們可以暴力列舉,期望時間複雜度\(O(\varphi(p))\)
下面介紹BSGS演算法(大步小步演算法)
令\(x=i*m-j,m=\lceil \sqrt p \rceil\)
我們可以由上面暴力演算法可以知道\(x<p\),又因為\(m=\lceil \sqrt{p} \rceil\),所以\(i<\sqrt m,0<j<\sqrt{m}\)
我們用-j來表示餘數,可以方便把j移動到右邊。(顯然這一步是需要逆元,也就證明了為什麼上面要求gcd(a,p)=1)
然後我們列舉j,可以得到一些數對,\((j,ba^j)\)插入雜湊表或者map讓j作為vaule,\(ba^j\)作為key。
如果有重複的key,那就用新的更新舊的(希望j大)。
再列舉i,如果在map或者雜湊表中找到了一樣的,那麼就是找到了找到一對(i,j)(希望i小)
這樣得出的im-j就是最小的x。期望時間複雜度\(O(\sqrt{p})\)
模板
本文來自部落格園,作者:{2519},轉載請註明原文連結:https://www.cnblogs.com/QQ2519/p/15112480.html