BSGS与二次剩余

BSGS

我们要求 axb(mod p) a x ≡ b ( m o d   p ) 中x的值,其中p为质数,或者a和p互质。
x可以写成: x=ik+j x = i ∗ k + j ,其中k为常数。
那么 aik+jb a i ∗ k + j ≡ b
aikajb(mod p) a i ∗ k ≡ a − j ∗ b ( m o d   p )
那么我们可以预处理每一个j的 ajb a − j ∗ b ,存进set或者map里,然后枚举i,看看map里存不存在 aik a i ∗ k 。当 k=φ(p) k = φ ( p ) 的时候复杂度最优。
当p和a不互质的时候,可以先把他们的gcd除干净(两边同时除gcd(a,p)之后可能gcd(a,p/d)!=0)

二次剩余

我们要求 x2a(mod p) x 2 ≡ a ( m o d   p ) 中x的值,其中 a<p a < p 且a!=0,p为质数,p=2我们不讨论,0我们直接出解嘛。
如果a存在解,那么我们把a叫做模p意义下的二次剩余,否则为二次非剩余。
先来研究一些性质。
定理1:对于一个p,有(p-1)/2个二次剩余。
证明: x20<x1,x2<pp|(x12x22) 考 虑 所 有 的 x 2 , 对 于 两 个 数 0 < x 1 , x 2 < p , 如 果 他 们 的 平 方 同 余 , 那 么 p | ( x 1 2 − x 2 2 ) ,那么 p|(x1x2)(x1+x2) p | ( x 1 − x 2 ) ( x 1 + x 2 ) x1x2 x 1 − x 2 显然不能是p的倍数,那么x1+x2=p,这样,我们发现每个x的平方会和另一个x的平方同余,而且他们的和为p,由于只有p-1个x,那么 x2 x 2 的值就只有(p-1)/2个。
定理2:若 a(p1)/21 a ( p − 1 ) / 2 ≡ − 1 ,那么x不存在,若=1,那么x必定存在且有两个,记为x1,x2,其中x1+x2=p。
证明:若=-1,那么由原方程可以推出 xp11 x p − 1 ≡ − 1 ,又有费马小定理 xp11 x p − 1 ≡ 1 ,矛盾,所以x不存在。后者就是定理一的内容。
定义一个数的勒让德符号 (ap) ( a p ) 他的取值有三个,1,-1,0,1代表a是p下的二次剩余,-1代表不是,0仅当a%p=0。那么易得 (ap)=a(p1)/2 ( a p ) = a ( p − 1 ) / 2

好了,现在我们来求x:
如果a不是二次剩余,返回无解。
如果是,那么有一个可行的做法如下:
首先找到一个c,使得 c2a c 2 − a 的勒让德符号为-1,也即无法开根。
定义同余复数域,一个复数 v=(a+bi) v = ( a + b i ) ,其中 i=c2a i = c 2 − a ,乘法等运算和通常意义上的复数一样。
有一个很强的结论: x=(a+i)(p+1)/2 x = ( a + i ) ( p + 1 ) / 2
很简单粗暴,可以证明右边做完幂运算之后虚部为0。

我们来感受一下他
x2=(a+i)p+1 x 2 = ( a + i ) p + 1
=(a+i)(a+i)p = ( a + i ) ( a + i ) p
=(a+i)j=0..pCjpaj ipj = ( a + i ) ∑ j = 0.. p C p j a j   i p − j
当j=1..p-1的时候,组合数里都有一个p,所以
(a+i)(ap+ip) ≡ ( a + i ) ( a p + i p )
(a+i)(ap+(c2a)(p1)/2i) ≡ ( a + i ) ( a p + ( c 2 − a ) ( p − 1 ) / 2 i )
(a+i)(api) ≡ ( a + i ) ( a p − i )
(a+i)(ai) ≡ ( a + i ) ( a − i )
a ≡ a
做完了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值