码迷,mamicode.com
首页 > 其他好文 > 详细

总结——数论:乘法逆元

时间:2018-03-06 19:10:34      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:扩展欧几里得   def   数论   ext   style   条件   col   ret   求逆   

零 乘法逆元

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

 

一 扩展欧几里得求逆元

  将方程 ax=1(mod m) 转化为 ax+my=1 ,套用求二元一次方程的方法,用扩展欧几里得算法求得一组 x0,y0 和 gcd。当 gcd=1 时逆元存在,调整 x0 在 [0,m-1] 的范围内即可。时间复杂度为O(ln n)。

 1 typedef  long long ll;
 2 void extgcd(ll a,ll b,ll& d,ll& x,ll& y){
 3     if(!b){ d=a; x=1; y=0;}
 4     else{ extgcd(b,a%b,d,y,x); y-=x*(a/b); }
 5 }
 6 ll inverse(ll a,ll n){
 7     ll d,x,y;
 8     extgcd(a,n,d,x,y);
 9     return d==1?(x+n)%n:-1;
10 }

 

二 费马小定理求逆元

 

总结——数论:乘法逆元

标签:扩展欧几里得   def   数论   ext   style   条件   col   ret   求逆   

原文地址:https://www.cnblogs.com/travelller/p/8516001.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!