BSGS算法(北上广深算法
用于求解 a x ≡ b ( m o d p ) a^x\equiv b~(mod~p) ax≡b (mod p) 的非负整数解 x x x,其中 ( a , p ) = 1 (a,p)=1 (a,p)=1。
算法过程
令 x = A ⌈ p ⌉ − B x=A\lceil\sqrt{p}\rceil-B x=A⌈p⌉−B,其中 A , B ≤ ⌈ p ⌉ A,B\leq\lceil\sqrt{p}\rceil A,B≤⌈p⌉。
那么问题也就转化为找到一组 A , B A,B A,B,满足 a A ⌈ p ⌉ − B ≡ b ( m o d p ) a^{A\lceil\sqrt{p}\rceil-B}\equiv b~(mod~p) aA⌈p⌉−B≡b (mod p)。
由于 ( a , p ) = 1 (a,p)=1 (a,p)=1。
所以 a A ⌈ p ⌉ ≡ b a B ( m o d p ) a^{A\lceil\sqrt{p}\rceil}\equiv ba^B~(mod~p) aA⌈p⌉≡baB (mod p)
暴力枚举 B B B,计算 b a B ba^B baB 的所有值,用哈希表记下该值所对应的最大 B B B。然后暴力枚举 A A A,看 a A ⌈ p ⌉ a^{A\lceil\sqrt{p}\rceil} aA⌈p⌉ 能否对应到一个 b a B ba^B baB。那么一个 x x x 的值就为 A ⌈ p ⌉ −