exBSGS算法学习笔记

BSGS算法(北上广深算法

用于求解 a x ≡ b   ( m o d   p ) a^x\equiv b~(mod~p) axb (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=Ap B,其中 A , B ≤ ⌈ p ⌉ A,B\leq\lceil\sqrt{p}\rceil A,Bp
那么问题也就转化为找到一组 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) aAp Bb (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) aAp 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} aAp 能否对应到一个 b a B ba^B baB。那么一个 x x x 的值就为 A ⌈ p ⌉ −

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值