逆元

一:什么是逆元?

  若对于数a,存在某数x,使得a*x≡1(mod p),我们就称x是a模p意义下的逆元,记为a-1。当且仅当gcd(a,p)=1的时候a在模p意义下有逆元,在“如何求逆元?”方法一种有证明。

二:逆元有什么作用?

  如果我们要求a+b mod p与a*b mod p的值,很简单,只需要分别求a mod p、b mod p然后再分别相加相乘就好了。但是如果我们要求 a/b 的逆元又如何呢?,我们不能分别对模p再对b模p再相除,这时候就要用到逆元了。我们有:
        $\frac{a}{b}\equiv\frac{a}{b}\times b\times b^{-1}=a\times b^{-1} (mod\ p)$

三:如何求逆元?

  方法一:

      我们有a*a-1≡1 (mod p),这等价于a*a-1=kp+1,显而易见,这个不定方程有解的充分必要条件是gcd(a,p)=1,我们可以用扩展欧几里得算法来解。详细方法请点这里

  方法二:

      如果我们要求1~n所有的数对数p(p与1~n的数互质)的逆元,那么我们显然不可能一个一个去求,我们需要高效的方法,那就是非常优秀的!线性求逆元,可以在O(n)时间内求出1~n的所有逆元,设inv[i]表示i模p意义下的的逆元(p为质数),那么有:
        $inv[i]=(p-[\frac{p}{i}])\times inv[p\%i]\% p$

证明:

设p=i*k+r,于是有:

        $i\times p+k\equiv 0 (mod\ p)$

两边同时乘上i-1*r-1于是得到:

        $r^{-1}\times k+i^{-1}\equiv 0 (mod\ p)$

再由式子r=p%i,k=p/i带入,移项就得到:

        $i^{-1}\equiv -[\frac{p}{i}]\times inv[p\% i] (mod\ p)$

也就是:

        $inv[i]=[p-\frac{p}{i}]\times inv[p\%i]\% p$

得证~。

  方法三:

      若p是质数的话,我们可以用费马定理求逆元。由费马定理得:
        $a^{p}\equiv a (mod\ p)$

得到:

        $a^{p-2}\times a\equiv 1 (mod\ p)$

这时候由逆元的定义就可以得到ap-2此时就是a在模p意义下的逆元,可以用快速幂快速求出。

  方法四:

      特别的,对于求1!~n!的所有逆元,我们可以先求出n!的逆元(可以方法一或者方法三求出),因为我们有:

        $n!\times (n+1)=(n+1)!$

两边同时乘上(n+1)!-1得到:

        $n!times (n+1)\times (n+1)!^{-1}\equiv 1 (mod\ p)$

由逆元的定义可以得到(n+1)*(n+1)!-1就是n!的逆元啦!于是我们可以从后往前递推出逆元。

 

转载于:https://www.cnblogs.com/Asika3912333/p/11332380.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值