高次剩余

有关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。 

      }

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

posted @ 2017-07-18 10:19  cyz666  阅读(868)  评论(0编辑  收藏  举报