高次剩余

有关x^a = b (%p)  p为质数  的问题

首先求解可以 用 原根+BSGS  转换  成 g^(x'a) = g ^ b'  ,即 x' * a = b'   (% p-1 )

然后可以判无解  或 判多解 (多解是循环的, 解的个数是 gcd(p-1,a), 每(p-1)/gcd(p-1,a) 一个解)

 

【二次剩余】

a2=b(%p)

(a2)(p-1)/2=b(p-1)/2=1

所以:b(p-1)/2=1  (欧拉判别法)是非零数b为p的二次剩余的充要条件。  若b为0要特判

 

下面的做法 用于无解时 扩域来运算  或者 是 用更小的复杂度来代替上面的BSGS:

random出一个b使得 w=b2-a 不是二次剩余。即 w(p-1)/2=-1。   因为[1,p)中的x的(p-1)/2次方  一半是1 一半是-1。 所以很快就能rand出来

x=(b+sqrt(w))(p+1)/2为方程的一个解。

  证明: {

      (b+sqrt(w))= bp+wp/2       (二项式展开后,C(p,i)%p!=0  当前仅当i=0或p )

                    = b+w(p-1)/2*sqrt(w)  =b-sqrt(w)

        所以  x2=(b+sqrt(w))p+1=(b-sqrt(w))*(b+sqrt(w)) =b2-w =a。 

      }

定义一个二元组进行之后的运算即可。

转载于:https://www.cnblogs.com/cyz666/p/7199024.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值