欧几里得及其扩展模板

1 int gcd(int a,int b) {
2     return b==0?a:gcd(b,a%b);
3 }
View Code
1 void gcd(int a, int b, int &d, int &x, int &y)
2 {
3     if(!b) { d = a; x = 1; y = 0; }
4     else { gcd(b, a%b, d, y, x); y -= x*(a/b); }
5 }
View Code

 

通过扩展欧几里得定理,可以求出a的模b乘法逆元。
由于 a*k mod b == 1 所以 a*k + b*n == 1 即求解方程中的k即可得到逆元 即函数中的x就是其逆元。
posted @ 2017-11-09 16:22  euzmin  阅读(126)  评论(0编辑  收藏  举报