扩展BSGS算法

普通 B S G S BSGS BSGS 有一个缺点,就是当 gcd ⁡ ( n , p ) ≠ 1 \gcd(n,p) \not = 1 gcd(n,p)=1 时,他不能用。

于是就出现了扩展 B S G S BSGS BSGS

前置知识

普通 B S G S BSGS BSGS

扩展欧几里得算法。

算法用途

用于求解 gcd ⁡ ( n , p ) ≠ 1 \gcd(n,p) \not=1 gcd(n,p)=1 时, n x ≡ m ( m o d p ) n^x \equiv m \pmod p nxm(modp) 的方程

(除了 x x x 都是常数)

算法复杂度

时间

空间

算法实现

我们先把 n x ≡ m ( m o d p ) n^x \equiv m \pmod p nxm(modp) 转化成

n x − 1 × n + k q = m n^{x-1} \times n + kq = m nx1×n+kq=m

可以看成 a n + b q = m an + bq = m an+bq=m,就是二元一次不定方程的,设 d = gcd ⁡ ( n , q ) d = \gcd(n, q) d=gcd(n,q)

根据扩欧, d   ∣   m d~|~m d  m,否则无解。

所以,可以把原式变成 n x − 1 × n d + k q d = m d n^{x-1} \times \frac{n}{d} + k\frac{q}{d} = \frac{m}{d} nx1×dn+kdq=dm
如果 gcd ⁡ ( n , q d ) ≠ 1 \gcd(n, \frac{q}{d}) \not= 1 gcd(n,dq)=1,就继续进行,如下

n x − 2 × n d × n d 2 + k q d × d 2 = m d × d 2 n^{x-2} \times \frac{n}{d} \times \frac{n}{d_2} + k\frac{q}{d \times d_2} = \frac{m}{d \times d_2} nx2×dn×d2n+kd×d2q=d×d2m

一直到 gcd ⁡ ( n , q ) = 1 \gcd(n, q) = 1 gcd(n,q)=1,设进行了 a a a 次,中间所有最小公因数的乘积为 b b b。得到

n x − a × n a b + k q b = m b n^{x-a} \times \frac{n^a}{b} + k\frac{q}{b} = \frac{m}{b} nxa×bna+kbq=bm

为了方便表示,就可以转换回。

n x − a × n a b ≡ m b ( m o d k q b ) n^{x-a} \times \frac{n^a}{b} \equiv \frac{m}{b} \pmod {k\frac{q}{b}} nxa×bnabm(modkbq)

然后用普通 B S G S BSGS BSGS 搞定就行了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值