EXBSGS

上一篇: B S G S 算 法 \rm BSGS算法 BSGS
建议先看完上一篇再来看这篇,否则可能就毫无阅读体验了QAQ

本篇虽然是转载文章,但是作者根据自己的理解修改了一些内容。


EXBSGS 算 法 \texttt{EXBSGS}算法 EXBSGS可以解决 p p p 不为质数的情况。

还是这个式子: a x ≡ b ( m o d p ) a^x\equiv b \pmod p axb(modp)
d = gcd ⁡ ( a , p ) d=\gcd(a,p) d=gcd(a,p)

  1. 如果 d ∤ b d\nmid b db ,唯一可能的解是 x = 0 x=0 x=0 。如果 b = 1 b=1 b=1 ,方程有解。
  2. 如果 d ∣ b d\mid b db d = 1 d=1 d=1 ,这时 a , p a,p a,p 互质,直接用 BSGS \text{BSGS} BSGS 解即可。

  1. 如果 d ∣ b d \mid b db d ≠ 1 d≠1 d=1 ,这种情况要重点讨论:
    ∵ a x ≡ b ( m o d p ) \because a^x\equiv b \pmod p axb(modp)
    ∴ a x − 1 × a d ≡ b d ( m o d p d ) \therefore a^{x-1} \times \frac ad \equiv \frac bd \pmod{\frac pd} ax1×dadb(moddp)
    也就是 a x − 1 ≡ b a ( m o d p d ) a^{x-1}\equiv \frac ba \pmod {\frac pd} ax1ab(moddp)
    a x − 1 ≡ b × a − 1 ( m o d p d ) a^{x-1}\equiv b\times a^{-1} \pmod {\frac pd} ax1b×a1(moddp)
    这个时候,我们发现式子又变成了 a x ≡ b ( m o d p ) a^x\equiv b \pmod p axb(modp) 的形式,而且规模也变小了。
    于是我们接着做下去,不断重复上述操作。
    k k k 次后 a , p a,p a,p 互质,那么这时就可以停止操作了。我们记第 i i i 次时求出的 d d d d i d_i di
    此时,方程就可以写成 a x − k ≡ b × a − k ( m o d p ∏ i = 1 k d i ) a^{x-k}\equiv b\times a^{-k} \pmod {\frac p{\prod_{i=1}^k d_i}} axkb×ak(modi=1kdip)
    我们已经达到了自己的目的:式子变成了 a x ≡ b ( m o d p ) a^x\equiv b \pmod p axb(modp) 的形式,并且式子中 a , p a,p a,p 两部分互质。于是就可以用 BSGS \text{BSGS} BSGS 解这个方程了。
    然而 x − k x-k xk 并不能是负的,所以先暴力枚举 x < k x<k x<k 的情况,如果此范围内无解再套用 B S G S \rm BSGS BSGS 解方程。显然,算出来的解 x ′ = x − k x'=x-k x=xk ,真正的答案 x x x 就等于 x ′ + k x'+k x+k
    时间复杂度就是 枚 举 + B S G S 枚举+\rm BSGS +BSGS 的复杂度。容易发现 k ≤ log ⁡ b k \le \log b klogb ,所以算法的时间复杂度就是 O ( log ⁡ b + p ) \mathcal O(\log b +\sqrt p) O(logb+p )

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值