zoukankan      html  css  js  c++  java
  • 乘法逆元的求法

    目录

    目录地址

    上一篇

    下一篇


    逆元的定义

    根据前面的定义:对于模数 (m) ,若对于剩余类 ([a]) ,存在剩余类 ([b]) 使得 ([a]cdot [b]=[1]) 则称呼 ([b])([a]) 的逆元

    我们写成同余的形式:若对于模数 (m) 和整数 (a) ,若 (bcdot aequiv 1(mod m)) 则称呼 (b)(a) 的逆元,记为 (a^{-1})(oldsymbol{Inv}(a))

    根据裴属定理,只有 (ax+my=kcdot gcd(a,m),kin Z_+) 有解

    因此,只有 (axequiv kcdot gcd(a,m)(mod m)) 是有解的

    因此,(a) 有逆元的充要条件为 (gcd(a,m)=1)


    逆元的性质

    我们证明,逆元在取模意义下是唯一的:设 (b,c) 同时是 (a) 的逆元,且 (b otequiv c(mod m))

    (bequiv bcdot 1equiv bcdot(acdot c)equiv (bcdot a)cdot cequiv 1cdot cequiv c(mod m))

    与条件相悖,故 (bequiv c(mod m))

    故我们知道,对于一个剩余类,它的逆元是唯一的

    但对于一个数,它的逆元是无穷多个的,我们一般称 (0leq a^{-1}<m) 的那个为逆元

    额外的,逆元还具有积性:

    ((ab)^{-1}equiv a^{-1}cdot b^{-1}(mod m))


    逆元的求法

    根据拓展欧几里得算法(exgcd)可以求出确定的

    (ax+my=gcd(a,m))(x,y)

    (gcd(a,m)=1)(a) 有一个逆元为 (x)

    故所求逆元为 (( (xmod m)+m)mod m)

    int x,y,g=exgcd(a%m,m,x,y),inv;
    if(g==1) inv=(x%m+m)%m;
    

    同时,由于 (gcd(a,m)=1) 我们还可以根据欧拉定理

    (a^{-1}cdot aequiv 1equiv a^{oldsymbolvarphi(m)-1}equiv a^{oldsymbolvarphi(m)-2}cdot a(mod m))

    (a^{-1}equiv a^{oldsymbolvarphi(m)-2}(mod m))

    int inv=fpow(a%m,phi(m)-2,m);
    
  • 相关阅读:
    爬虫代理及ssl验证
    python3编程基础之一:量的表示
    python3编程基础之一:标识符
    python3编程基础之一:关键字
    dell如何安装Win10/Ubuntu双系统
    linux修改用户名和密码
    cmake入门之内部构建
    入门cmake,窥探编译过程
    数据结构交作业代码的仓库名称
    手动制作BIOS和EFI多启动U盘
  • 原文地址:https://www.cnblogs.com/JustinRochester/p/12394019.html
Copyright © 2011-2022 走看看