數論中乘法逆元的幾種求法


逆元

在離散數學中的概念 自行查找資料吧

百度簡單介紹一句   

逆元 一般指逆元素 逆元素是指一個可以取消另一給定元素運算的元素,在數學里,逆元素廣義化了加法中的加法逆元和乘法中的倒數。

 

先來引入取模(取余,兩者差別不大)概念

 

(a +  b) % p = (a%p +  b%p) %p  (對)

(a  -  b) % p = (a%p  -  b%p) %p  (對)

(a  *  b) % p = (a%p *  b%p) %p  (對)

(a  /  b) % p = (a%p  /  b%p) %p  (錯)

 

為什么除法錯的

證明是對的難,證明錯的只要舉一個反例

(100/50)%20 = 2       ≠      (100%20) / (50%20) %20 = 0

 

對於一些題目,我們必須在中間過程中進行求余,否則數字太大,電腦存不下,那如果這個算式中出現除法,我們是不是對這個算式就無法計算了呢?

答案當然是 NO (>o<)

這時就需要逆元了

a*x  = 1 (mod p)   滿足a乘以x對p取模等於1  此時  稱 x為a對p的逆元

只有a與p互質才有逆元   互質 公約數只有1  最大公約數為1


 

 

費馬小定理

                                       a^(p-1) ≡1 (mod p)

     變形                          a*a^(p-2) ≡1 (mod p)

     此時                          a^(p-2)就是a對p的逆元

 

 1 LL pow_mod(LL a, LL b, LL p)   //用到快速冪的知識,函數返回a的b次方對p取模
 2 { 
 3     LL ret = 1;
 4     while(b)
 5     {
 6         if(b & 1) 
 7             ret = (ret * a) % p;
 8         a = (a * a) % p;
 9         b >>= 1;
10     }
11     return ret;
12 }
13 LL Fermat(LL a, LL p)          //返回a對p的逆元
14 { 
15         return pow_mod(a, p-2, p);
16 }

 

 


 

 

擴展歐幾里得

                                        ax+by=gcd(a,b)

把b看做p   a與b互質 所以  gcd(a,b)=1,即ax+by=1

這個解的x就是a關於b的逆元,y就是b關於a的逆元

證明  兩邊同對b取模

                                            a*x % b + b*y % b = 1 % b

                                                     a*x % b = 1 % b

                                                      a*x = 1 (mod b)

所以x是a關於b的逆元    反之可證明y

 

 1 void exgcd(LL a, LL b, LL &x, LL &y, LL &d)  //歐幾里得函數
 2 {
 3     if (!b) 
 4         {d = a, x = 1, y = 0;}
 5     else
 6     {
 7         exgcd(b, a % b, y, x, d);
 8         y -= x * (a / b);
 9     }
10 }
11 LL inv(LL t, LL p)                    //返回t對p的逆元
12 {
13     LL d, x, y;
14     exgcd(t, p, x, y, d);
15     return (x % p + p) % p;        //x可能為負,也可能過大
16 }

 

 


 

 

 

遞推方法

 

1 LL inv(LL t, LL p) //求t關於p的逆元,注意:t要小於p,最好傳參前先把t%p一下
2 {
3     return t == 1 ? 1 : (p - p / t) * inv(p % t, p) % p;
4 }

 

 


 

 

推薦博客 值得看    http://www.cnblogs.com/linyujun/p/5194184.html

                              https://oi.men.ci/mul-inverse/

 

菜雞一枚  歡迎大佬糾錯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM