标签:快速 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