zoukankan      html  css  js  c++  java
  • 逆元基础知识

    定义:对于正整数a和m,如果有 ax=1(mod m),那么把这个同余方程中x的最小正整数解叫做a模m的逆元。

    求法:1.扩展欧几里得

            2.根据费马小定理得到逆元为a^(m-2) mod m。

            证明:当m是素数时,由费马小定理

            a^(m-1)=1(mod m)

      => a^(m-2)*a=1(mod m)

      => a^(m-2)=a^-1(mod m)

    所以:a^(m-2)mod m 是a在mod m下的逆元。

    问题:ans=(a/b)mod m

             当a与m互素时,可以用exgcd或费马小定理(m是素数),实际上还有一种一般求解方法:

             ans = (a/b)mod m = amod(mb)/b

             证明:a/b=km+x

                     a=kbm+bx

                     amod(bm)=bx

                     amod(bm)/b=x

                    (a/b)mod m = amod(bm)/b

          有些问题需要求解1->p模p的所有逆元,这里p为奇质数。那么如果用快速幂求时间复杂度为O(p*logp),

    如果对于一个1000000级别的素数,这样做的时间复杂度是很高了。实际上有O(p)的算法,有一个递推式如下:

           inv[i]=(M-M/i)*inv[M%i]%M

           证明:设t=M/i,k=M%i,那么

               => t*i+k=0(mod M)

               => -t*i=k(mod M)

               对上式两边同时除,进一步得到

               -t*inv[k]=inv[i](mod M)

               再把t和k替换掉,最终得到

               inv[i]=(M-M/i)*inv[M%i]%M

               初始化inv[i]=1,这样就可以通过递推求出1->p模奇素数p的所有逆元了。

                另外1->p模p的所有逆元值对应中1->p所有的数,比如p=7,那么1->6对应的逆元是1 4 5 2 3 6。

     两个例题:poj1845,bzoj2186

  • 相关阅读:
    移动端如何强制页面横屏
    css实现内容渐变隐藏效果,手机网页版知乎内容隐藏效果的实现
    css3中样式计算属性calc()的使用和总结
    如何使用JS操纵伪元素
    HTML5全局属性汇总
    20 个 CSS高级样式技巧汇总
    网页开发中利用CSS以图换字的多中实现方法总汇
    html/css解决inline-block内联元素间隙的多种方法总汇
    [算法] 泊松分布、指数分布
    [算法] 递归
  • 原文地址:https://www.cnblogs.com/harden/p/6262978.html
Copyright © 2011-2022 走看看