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

乘法逆元

时间:2017-08-02 00:37:01      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:快速   exgcd   乘法   应用   span   ret   费马小定理   合数   组合   

定义:当(a,p)=1时,存在ax≡1(mod p),则x叫作a在模p意义下的乘法逆元。

求法:

1.当p为质数时,由费马小定理,得ap-1≡1(mod p),即(a·ap-2)≡1(mod p),则a在模p意义下的乘法逆元是ap-2,直接用快速幂可求得。

2.当p不为质数时,用扩展欧几里得算法求a的逆元。

代码:

 1 int exgcd(int a,int b,int &x, int &y)
 2 {
 3     int d=a;
 4     if(b!=0){
 5         d=exgcd(b,a%b,y,x);
 6         y-=(a/b)*x;
 7     }
 8     else{
 9         x=1;
10         y=0;
11     }
12     return d;
13 }
14 int mod_inverse(int a,int p)
15 {
16     int x, y;
17     int d=exgcd(a,p,x,y);
18     return (p+x%p)%p;
19 }

 应用:计算(a/b)%p时,(比如求组合数取模),可以转化为a*c%p,其中c是b在模p意义下的乘法逆元。

乘法逆元

标签:快速   exgcd   乘法   应用   span   ret   费马小定理   合数   组合   

原文地址:http://www.cnblogs.com/let-dream-fly/p/7271488.html

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