乘法逆元

对于缩系中的元素,每个数a均有唯一的与之对应的乘法逆元x,使得ax≡1(mod n)
一个数有逆元的充分必要条件是gcd(a,n)=1,此时逆元唯一存在
逆元的含义:模n意义下,1个数a如果有逆元x,那么除以a相当于乘以x。

下面给出求逆元的几种方法:

1.扩展欧几里得

给定模数m,求a的逆相当于求解ax=1(mod m)
这个方程可以转化为ax-my=1
然后套用求二元一次方程的方法,用扩展欧几里得算法求得一组x0,y0和gcd
检查gcd是否为1
gcd不为1则说明逆元不存在
若为1,则调整x0到0~m-1的范围中即可

PS:这种算法效率较高,常数较小,时间复杂度为O(ln n)

typedef  long long ll;
void extgcd(ll a,ll b,ll& d,ll& x,ll& y){if(!b){ d=a; x=1; y=0;}else{ extgcd(b,a%b,d,y,x); y-=x*(a/b); }
}
ll inverse(ll a,ll n){ll d,x,y;extgcd(a,n,d,x,y);return d==1?(x+n)%n:-1;
}
2.费马小定理

在模为素数p的情况下,有费马小定理
a^(p-1)=1(mod p)
那么a^(p-2)=a^-1(mod p)
也就是说a的逆元为a^(p-2)

而在模不为素数p的情况下,有欧拉定理
a^phi(m)=1(mod m) (a⊥m)
同理a^-1=a^(phi(m)-1)

因此逆元x便可以套用快速幂求得了x=a^(phi(m)-1)

但是似乎还有个问题?如何判断a是否有逆元呢?

检验逆元的性质,看求出的幂值x与a相乘是否为1即可

PS:这种算法复杂度为O(log2N)在几次测试中,常数似乎较上种方法大

当p比较大的时候需要用快速幂求解

typedef  long long ll;
ll pow_mod(ll x, ll n, ll mod){ll res=1;while(n>0){if(n&1)res=res*x%mod;x=x*x%mod;n>>=1;}return res;
}

当模p不是素数的时候需要用到欧拉定理

a^phi(p)≡1               (mod p)
a*a^(phi(p)-1)≡1      (mod p)
a^(-1)≡a^(phi(p)-1)  (mod p)
所以aϕ(m)−1为a的逆元
时间复杂度O(n√)即求出单个欧拉函数的值
(当p为素数的时候phi(p)=p-1,则phi(p)-1=p-2可以看出欧拉定理是费马小定理的推广)
PS:这里就贴出欧拉定理的板子,很少会用欧拉定理求逆元
3.特殊情况

一:

当N是质数,a是(N+1)的约数时,a−1=N+1a 
这点也很好理解。当N是质数,0 < a < N时,(a,N)=1,则a肯定存在逆元。 
而解出的N+1a就满足N+1a⋅a≡1(modN),故它是a的逆元。

在CF 696C,N=1000000007时

2−1=1000000007+12=500000004
3−1=1000000007+13=333333336

求解就灰常方便了…

二:
求逆元一般公式(条件b|a)

ans=a/bmodm=amod(mb)/b

公式证明:

PS:实际上a mod (bm)/b这种的对于所有的都适用,不区分互不互素,而费马小定理和扩展欧几里得算法求逆元是有局限性的,它们都会要求互素,如果a与m不互素,那就没有逆元,这个时候需要a mod (bm)/b来搞(此时就不是逆元的概念了)。但是当a与m互素的时候,bm可能会很大,不适合套这个一般公式,所以大部分时候还是用逆元来搞
4.逆元打表

有时会遇到这样一种问题,在模质数p下,求1~n逆元 n< p(这里为奇质数)。可以O(n)求出所有逆元,有一个递推式如下

它的推导过程如下,设,那么

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

再把替换掉,最终得到

初始化,这样就可以通过递推法求出1->n模奇素数的所有逆元了。

另外有个结论的所有逆元值对应中所有的数,比如,那么对应的逆元是

typedef  long long ll;
const int N = 1e5 + 5;
int inv[N];void inverse(int n, int p) {inv[1] = 1;for (int i=2; i<=n; ++i) {inv[i] = (ll) (p - p / i) * inv[p%i] % p;}
}

例题可以参考http://blog.csdn.net/acdreamers/article/details/8220787

逆元的几种求法(扩展欧几里得,费马小定理或欧拉定理,特例,打表等)相关推荐

  1. 费马小定理、欧拉定理与扩展欧拉定理(含证明)

    这里就以自己做好的PPT图片的形式给出了:

  2. 逆元+费马小定理+扩展欧几里得

    逆元:(即是逆元素)逆元素是指一个可以取消另一给定元素运算的元素. 在一个代数系统(S,*)中,存在单位元素e,如果对S内的元素a存在a^-1 * a = e,则将 a^-1称为a 的左逆元. 同理若 ...

  3. 扩展欧几里得的几个定理以及证明

    扩展欧几里得的三个定理: 定理一:如果d = gcd(a, b),则必能找到正的或负的整数k和l,使d = a*x+ b*y. 定理二:若gcd(a, b) = 1,则方程ax ≡ c (mod b) ...

  4. 关于逆元(费马小定理,exgcd)

    1.逆元是个什么东西 首先这里有个式子: ((( ab\frac{a}{b}ba​ ))) modmodmod ppp,这个式子的答案怎么求呢?? A 直接求不行吗? Q别想了不能.我们发现一个分数 ...

  5. 初等数论--同余--欧拉函数、欧拉定理、费马小定理

    初等数论--同余--欧拉函数.欧拉定理.费马小定理 概念 同余类,既约同余类 欧拉函数 完全剩余系,既约剩余系 关于完全剩余系.既约剩余系一些比较简单的定理 欧拉定理.费马小定理 博主是初学初等数论( ...

  6. 取模除法(逆元)(费马小定理)(线性求逆元)

    文章目录 引言 逆元 费马小定理 内容 应用 证明 线性求逆元 thanks for reading! 引言 我们做题时经常会由于答案过大,被要求使答案对一个质数取模 我们都知道,加和乘对取模是没有影 ...

  7. 除法取模与逆元/费马小定理

    对于正整数和,如果有,那么把这个同余方程中的最小正整数解叫做模的逆元. 逆元一般用扩展欧几里得算法来求得,如果为素数,那么还可以根据费马小定理得到逆元为.(都要求a和m互质) 推导过程如下(摘自Acd ...

  8. 【BZOJ】3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛(排列组合+乘法逆元+欧拉定理/费马小定理)...

    http://www.lydsy.com/JudgeOnline/problem.php?id=3398 以下牡牛为a,牝牛为b. 学完排列计数后试着来写这题,"至少"一词可以给我 ...

  9. hihocoder #1698 假期计划 (排列组合+费马小定理+乘法逆元)

    Description 小Ho未来有一个为期N天的假期,他计划在假期中看A部电影,刷B道编程题.为了劳逸结合,他决定先拿出若干天看电影,再拿出若干天刷题,最后再留若干天看电影.(若干代指大于0)  每 ...

最新文章

  1. WifiP2pService工作流程
  2. 杭电ACM刷题(1):1002,A + B Problem II
  3. Python语言学习之双下划线那些事:python和双下划线使用方法之详细攻略
  4. dynamic programming for knapsack with repeated items algorithm demonstration
  5. spring 学习 requestMapping
  6. Php与mssql数据交互
  7. mysql 创建查询 删除_MYSQL数据库查询删除创建企业基本知识
  8. wine mac 中文 方块乱码 解决
  9. 戴尔t140服务器价格型号,戴尔_PowerEdge T140塔式服务器_企业服务器_网络存储服务器 | Dell 中国大陆...
  10. phpredis 报错 “Function Redis::setTimeout() is deprecated” 解决方法
  11. 趣学 C 语言(十二)—— 文件操作
  12. sql语句ding_SQL语句映射文件增删改查、参数、缓存
  13. iptables模块功能中文介绍
  14. LSTM神经网络算法
  15. 2019你会被裁员吗?
  16. PassGAN阅读笔记
  17. win7怎样更改计算机密码,win7系统电脑怎么设置开机密码
  18. 精讲精练之图像分割经典算法——分水岭算法
  19. 面向对象以及三大特性
  20. ros 发布信息频率_ROS:消息发布器和订阅器(c++)

热门文章

  1. 用PPT做多种类型的交互练习题
  2. 欢聚时代(YY)2018笔试总结(数据挖掘方向)
  3. Godot背包系统(三)
  4. 学会了 Vim 还有必要用 GitHub Atom 或者 Sublime Text 么?
  5. c++图形库 allegro 开发(一)
  6. 人生何求知己,淡谈我的人生囧途(初一)
  7. 用java编程的单片机_单片机可以用java编程或经过技术手段来可以用java编程吗?...
  8. 坚果投影仪显示服务器异常,坚果投影仪风扇故障的原因是什么?如何解决风扇故障问题...
  9. ShareX - 功能强大、免费开源的 Windows 截图录屏工具,支持 OCR 识别和滚动截图等多种功能
  10. KT1025A蓝牙芯片的录音MP3功能支持TF卡和U盘录音详细功能说明_完整_V1.1