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。 

          }

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

  • 相关阅读:
    查询集 QuerySet
    JWT的认识和session的区别
    Django REST framework 简介
    Django自动获取项目中的全部URL
    flask数据库迁移
    类中方法的两种调用方式
    flask项目配置
    NOIP 模拟 $19; m u$
    NOIP 模拟 $18; m 老司机的狂欢$
    NOIP 模拟 $18; m 炼金术士的疑惑$
  • 原文地址:https://www.cnblogs.com/cyz666/p/7199024.html
Copyright © 2011-2022 走看看