zoukankan      html  css  js  c++  java
  • 高次剩余

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

          }

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

  • 相关阅读:

    k
    通过类名调用类方法
    类Area的getArea方法是一个重载方法
    构造cry
    两个lader对象共享bottom
    向一个方法的基本数据类型参数传值
    Circle
    常量的用法
    显示本机时间
  • 原文地址:https://www.cnblogs.com/cyz666/p/7199024.html
Copyright © 2011-2022 走看看