1. 程式人生 > >BSGS(大步小步) 演算法 學習小記

BSGS(大步小步) 演算法 學習小記

問題

以下方程
x y z ( m o

d p ) x^y \equiv z\pmod{p}
已知 x x
, z z y y

解法

根據費馬小定理有 a ϕ

( p ) 1 ( m o d m ) a^{\phi(p)} \equiv 1\pmod{m}
所以答案上界是 ϕ ( p ) \phi(p)
m = ϕ ( p ) m=\sqrt {\phi(p)}
那麼假設 y = a m + b y=am+b

x a m + b z ( m o d p ) x^{am+b} \equiv z \pmod{p}
x b z a m ( m o d p ) x^{b} \equiv z^{-am} \pmod{p}
那麼將 x b x^b 用hash存起來,顯然只有m個。
然後列舉a,右邊與左邊匹配就行了,也是隻有m個。
複雜度就是根號級別的了。

由於沒找到程式,就不貼了。