BSGS模版

# 用途

给定整数a,b,p,其中a,b互质,求出一个正整数x,使得 ax ≡ b (mod p)
# 推导
模的剩余类有产生循环的情况,即a0, a1, ...... , an-1模n(质数)意义下的剩余类
an, an+1, ...... , a2n-1的剩余类相同,因此答案一定在[0, n-1]内。
先求出一部分a的幂次模p意义下的值,将它们存起来,然后使得剩下没有求值的部分能够想个办法利用已求值直接查表。
令求值的长度为m=⌈√p⌉。
没有求值部分怎么来求,比如am, ...... a2m1这一段,如果有解,一定是 a⋅ a≡ (mop)的情况,
am移到右边,变成 a≡ b' (mop) , b' = am。直接查这个b'有没有对应的i的答案。
这样,没有求值的部分的每一段就可以只进行一次查询来判断该段内是否有解。
用hash表来保存,xi为余数为i的ax中最小的x值,则插入查询都为O(logn),
总复杂度达到O(√nlogn)。

猜你喜欢

转载自www.cnblogs.com/hhyx/p/12651045.html