【SGU 261】BSGS算法详解

BSGS算法,又称大步小步算法,用于高效求解模方程。通过建立hash表存储大步枚举结果,再用小步枚举进行匹配,找到原根并解决模运算问题。原根是模数的乘法群的生成元,算法在素数情况下尤其有效,能求解模方程的解。
摘要由CSDN通过智能技术生成

BSGS(baby-step gaint-step),大步小步算法,该算法可以在O(\sqrt p)时间复杂度内求解

                                                           a^x \equiv b \ mod \ p

gcd(a, p) = 1, 0 \leq x < p

算法描述

我们令x = A\left \lceil \sqrt p\ \right \rceil - B0 \leq A, B <= \left \lceil \sqrt p\ \right \rceil,这样我们可以保证 0 \leq x < p

a^{A\left \lceil \sqrt p \ \right \rceil - B} \equiv b \ mod \ p

\Leftrightarrow a^{A \left \lceil \sqrt p\ \right \rceil} \equiv b a^B \ mod\ p

由于我们知道a,b,我们可以先枚举B算出右边 ba^B\ mod \ p,存在一个hash表里面,然后再枚举A计算左边的a^{A\left \lceil \sqrt p\ \right \rceil}的值,然后去判断hash表里面是否有这个值,如果有,我们就得到了 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值