BSGS算法

BSGS算法

视频证明过程疑似有误。

BSGS算法用于解决特殊的离散对数问题。通俗的讲,BSGS算法可以解出如下关于x的同余方程的最小非负整数解:
a x ≡ b ( m o d m )        ( a ⊥ m ) a^x\equiv b\pmod m\;\;\;(a\perp m) axb(modm)(am)

BSGS算法的过程是:
s = ⌈ m ⌉ , x = q s − r ( 0 ≤ r < s ) s=\lceil\sqrt m\rceil,x=qs-r(0\leq r<s) s=m ,x=qsr(0r<s),则有:
a q s ⋅ a − r ≡ b a^{qs}\cdot a^{-r}\equiv b aqsarb
a q s ≡ b ⋅ a r a^{qs}\equiv b\cdot a^r aqsbar
( a s ) q ≡ b ⋅ a r (a^s)^q\equiv b\cdot a^r (as)qbar

然后,我们顺序预处理出 b ⋅ a r m o d    m b\cdot a^r\mod m barmodm,把 p a i r < b ⋅ a r m o d    m , r > pair<b\cdot a^r\mod m,r> pair<barmodm,r>放到哈希表内,注意要求最小解,因此 r r r越大越好,相同的key值,应该后来把先来的替换。

然后我们顺序枚举 q q q,计算 ( a s ) q m o d    m (a^s)^q\mod m (as)qmodm,检查哈希表内有没有相同的值。如果有就是答案。(因为答案要最小化,因此第一个枚举到的就是答案)

找不到答案,就输出无解。

BSGS事实上是分块,时间复杂度O( n \sqrt n n )

证明一下:
由于 a ⊥ m a\perp m am,由欧拉定理可知:
a x ≡ a x    m o d    φ ( m ) ⋅ ∏ a φ ( m ) ≡ a x    m o d    φ ( m ) ( m o d m ) a^x\equiv a^{x\;mod\;\varphi(m)} \cdot \prod a^{\varphi(m)}\equiv a^{x\;mod\;\varphi(m)} \pmod m axaxmodφ(m)aφ(m)axmodφ(m)(modm)

假设有解,在 x ∈ [ 0 , φ ( m ) ] x\in[0,\varphi(m)] x[0,φ(m)]范围内必有一个答案,BSGS算法相当于枚举了 [ 0 , m ] [0,m] [0,m]的范围(由于上取整,甚至有可能还大),必然有一组解。

否则无解。

后记

于是皆大欢喜。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值