拓展欧几里德算法求逆元2

拓展欧几里德算法求逆元2
 1 void gcd(int a,int b,int &d,int &x,int &y)

 2 {

 3     if(!b)

 4     {

 5         d=a;

 6         x=1;

 7         y=0;

 8     }

 9     else

10     {

11         gcd(b,a%b,y,x);

12         y-=x*(a/b);

13     }

14 }

15 

16 //计算模n下a的逆元,如果不存在逆元,返回-1

17 int inv(int a,int n)

18 {

19     int d,x,y;

20     gcd(a,n,d,x,y);

21     return d==1? (x+n)%n: -1;

22 }
View Code

 公式:

(a/b)%c=((a%c)*b^(-1)%c)

 

你可能感兴趣的:(算法)