首页 > 其他分享 >逆元

逆元

时间:2023-01-05 15:46:04浏览次数:60  
标签:b% return tx int 逆元 mod

        乘法逆元,一般用于求(a / b)(mod p)的值(p 通常为质数),是解决模意义下分数数值的必要手段。

        关于求余,有以下三种规则:

        加法:(a+b)%m=(a%m+b%m)%m

        减法:(a−b)%m=(a%m−b%m)%m

        乘法:(a∗b)%m=(a%m∗b%m)%m

        但是这个规则在除法不适用,所以就要用到乘法逆元。

逆元的概念

若a*x≡1(mod b),a,b互质,则称x为的逆元,记为a-1

根据逆元的定义,可转化为a*x+b*y=1,用拓展欧几里得法求解。逆元可以用来在计算(t/a)mod b时,转化为t*a-1 mod b。

那么逆元怎么求呢?我们来看3种方法。

  1. 利用快速幂和扩展欧几里得算法求逆元。

         void exgcd(int a,int b,int c,int &x,int &y){

                 If(a==0){

                           x=0;y=c/b;return;

                  }

                 else{

                          int tx,ty;

                          exgcd(b%a,a,tx,ty);

                          x=ty-(b/a)*tx;

                          y=tx;

                          return;

                  }

        2.费马小定理

        p是一个质数,并且a % p≠0,则有a p − 1≡1 ( mod p ),a p − 2≡a−1,即可得到逆元。

        参考代码:

        int quic_pow(int a,int n,int mod){

                  int ans=1;

                  while(n){

                           If(n&1)ans=(and*a)%mod;

                           a=(a*a)%d;

                           n >>=1;

                  }

                  return ans;

           }

        int inv(int a,int p){

                   return quick_pow(a,p-2,p);

        }

       3.线性求解逆元

        用于求一连串数字对于一个 mod p 的逆元,并且大多数题只能用这种方法,别的算法都比这些要求一串要慢。

       首先我们有一个,1^(−1) = 1 (mod p)

       然后设 p=k*i+r,(1<r<i<p)也就是k是p/i的商,r是余数。

       再将这个式子放到(mod p)意义下就会得到:k∗i+r =0(mod p)

       然后乘上i^(-1), r^(−1)就可以得到:

        k ∗r−1+i−1=0(mod p)

        i^(-1)=(−k)∗r−1(mod p)

        i^(-1 =−⌊p/i⌋∗(p mod i)^(-1)(mod p)

       然后,我们就可以从前面推出当前的逆元了。

       例题 洛谷P3811

1672903685701

标签:b%,return,tx,int,逆元,mod
From: https://www.cnblogs.com/ddfy198811/p/17027734.html

相关文章

  • 乘法逆元学习笔记
    定义当\(a,b\)满足\(ab\equiv1\pmodp\),\(a,b\)互为\(\pmodp\)的乘法逆元,也记作\(a^{-1}\)和\(b^{-1}\)。前置知识1.费马小定理若\(p\)为质数且\(\gc......
  • 乘法逆元
    乘法逆元在取模运算中发挥着极其重要的作用。我们可以很轻松的证明以下式子:\[(a+b)\%p=(a\%p+b\%p)\%p\\(a-b)\%p=(a\%p-b\%p)\%p\\a*b\%p=a\%p*b\%p\]但是对于......
  • 快速幂与逆元
    先上快速幂板子:#defineintlonglongintfast_power(intx,inty,intmod){intres=1;while(y){if(y&1)res=(res*x)%mod;x=(x*x)%mod;......
  • 乘法逆元
    若线性同余方程\(ax\equiv1(\modb)\),则称\(x\)为\(a\modb\)时的逆元,记作\(a^{-1}\)。扩展欧几里得求逆元。要求\(gcd(a,b)=1\).intexgcd(inta,intb,int&x,int......
  • 快速幂及求逆元
    目录快速幂1、快速幂的作用2、算法原理3、逆元快速幂1、快速幂的作用  快速幂可以帮助我们在\(O(\logk)\)的时间复杂度内计算出\(a^k\quadmod\quadp\)的结果。2......
  • 有理数逆元板子
    template<intM=1000000007>structrational{llp,q;rational(llp=0,llq=1):p(p),q(q){}rationaloperator+(constrational&rhs)const{......
  • BZOJ 2111([ZJOI2010]Perm 排列计数-乘法逆元+完全二叉树模型+数列分数表示法)
    2111:[ZJOI2010]Perm排列计数TimeLimit: 10Sec  MemoryLimit: 259MBSubmit: 478  Solved: 283[​​Submit​​][​​Status​​][​​Discuss​​]......
  • 裴蜀定理、Exgcd与乘法逆元
    目录裴蜀定理Exgcd扩展欧几里得算法例题:P5656,exgcd模板题裴蜀定理逆元并非对任何数存在……定理:\(ax+by=c\)有解\(\{x,y\}\)当且仅当\(c\)是\(\gcd(a,b)\)的倍......
  • AcWing 算法提高课 通过递推求等比数列的和(防止使用逆元出现问题)
    基于分治的思想:  例题:https://www.acwing.com/problem/content/99/模板:求num^0+num^1+...+num^kconstintMOD=9901;intQuickExp(intbase,intexp){bas......
  • P3811 乘法逆元
    【模板】乘法逆元题目背景这是一道模板题题目描述给定\(n,p\)求\(1\simn\)中所有整数在模\(p\)意义下的乘法逆元。这里\(a\)模\(p\)的乘法逆元定义为\(ax......