1. 程式人生 > >總結——數論:乘法逆元

總結——數論:乘法逆元

元素 pre ext pos col 存在 gpo gcd oid

零 乘法逆元

  對於縮系中的元素,每個數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 }

二 費馬小定理求逆元

總結——數論:乘法逆元