ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

逆元

2019-07-26 19:53:29  阅读:374  来源: 互联网

标签:inv 整数 逆元 p% 质数 mod


 

一、什么是逆元

  当求解公式:(a/b)%m 时,因b可能会过大,会出现爆精度的情况,所以需变除法为乘法:

  设c是b的逆元,则有b*c≡1(mod m);

  则(a/b)%m = (a/b)*1%m = (a/b)*b*c%m = a*c(mod m);

  即a/b的模等于a*b的逆元的模;

  逆元就是这样应用的;

 

二、求逆元的方法

  那么逆元怎么求 ? 首先这里得纠正一点, 我们不能直接说一个数的逆元是多少, 
应该这么说: 一个数 x 在模 p的条件下的逆元是多少.(这点概念还是蛮重要的) 
其次,我们不难得知一个数的逆元有无穷多个,但是我们只需要求得一个数的最小正整数逆元就行了

  另外,一个数 x 在模 p 的条件下不一定有逆元, x关于 p 的逆元存在 当且仅当 x 和 p 互质 
这里有一个推导: (设 a 为 x的逆元, b 为任意整数)

  x∗a≡1(mod p)= 将p连入式子=> x∗a=1−b∗p => x∗a+b∗p=1

  那么我们就得到了一组新方程: x∗a+b∗p=1 若x 和 p不互质, 则 x和 p 存在公约数 d=gcd(x,p)>1

  提取出d, 得到: d(x/d∗a+p/d∗b)=1 移项得到: (x/d∗a+p/d∗b)=1/d

  易知 x , p 能整除 d, 所以括号内定为整数, 又因为d>1 ,等式右边必为真分数, 等式无解

  证毕

  (1).费马小定理(证明)

  内容:费马小定理(Fermat's little theorem)是数论中的一个重要定理,在1636年提出。如果p是一个质数,而整数a不是p的倍数,则有a^(p-1)≡1(mod p)。 

  在是素数的情况下,对任意整数都有。 
  如果无法被整除,则有。 
  可以在为素数的情况下求出一个数的逆元,,即为逆元。

  题目中的数据范围1<=x<=10^9,p=1000000007,p是素数;

  所以x肯定就无法被p整除啊,所以最后就得出x^(p-2)为x的逆元啦。

  复杂度O(logn);

  x % p 中x的逆元为 quick_pow(x,p-2,p) x,y,mod (p是一个质数,而整数a不是p的倍数)

  (2)扩展欧几里得算法求逆元

  扩展欧几里得算法可以参考小白书;

  百度百科-乘法逆元中有这样一个例子:

  例如:4关于1模7的乘法逆元为多少?   4X≡1 mod 7   这个方程等价于求一个X和K,满足   4X=7K+1   其中X和K都是整数。

  求x,k就是扩展欧几里得算法了吧~

  可扩展欧几里得求逆元ax≡1(mod n)其中a,n互质;

  复杂度:O(logn);

  x % p 中x的逆元 先扩欧计算出x值,ex_gcd(a,p,inv_a,y),逆元则为inv_a 

  (3) 求 1! ~ n! 的逆元

    公式:inv[i]≡inv[i+1]?(i+1)(mod p)(inv[i]代表i!的逆元)

    fac[i]∗inv[i]≡1(mod p)

    fac[i+1]∗inv[i+1]≡1(mod p)=>fac[i]∗(i+1)∗inv[i+1]≡1(mod p)

    由 同余的除法原理可得 : inv[i]≡inv[i+1]∗(i+1)

    推导完毕

 

  (4) 逆元线性筛 ( P为质数 )

    求1,2,...,N关于P的逆元(P为质数)

    公式:inv[i]≡inv[p%i]∗(−p/i)(mod p)

    令 s=p/i,t=p%i, 则有:

    s∗i+t=p (显然)

    然后 s∗i+t≡0(mod p)

    移项得 t≡−s∗i(mod p)

    同除以 t∗i得t/(t∗i)≡−s∗i/(t∗i)(mod p)

    将除法转化为乘法 => inv[i]≡−s∗inv[t](mod p)

    于是将 s=p/i,t=p%i带入就可以得到: inv[i]≡inv[p%i]∗(−p/i)(mod p)

    推导完毕

    复杂度:O(N)

相关文章:

  https://blog.csdn.net/qq_35416331/article/details/81059747

  https://blog.csdn.net/tobeyours/article/details/79619333

   

 

标签:inv,整数,逆元,p%,质数,mod
来源: https://www.cnblogs.com/SeanOcean/p/11251011.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有