计算乘法逆元,比如3mod8的乘法逆元为3

是如何用欧几里得算法计算的呢???

数对 x,y ,使得 gcd(a,b)=ax+by。
c++语言实现:


#include <iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int x,y,q;
void ex_Eulid(int a,int b){
if(b==0){
x=1;y=0;q=a;
}
else{
ex_Eulid(b,a%b);
double temp=x;
x=y;y=temp-a/b*y;
}
}
int main() {
int a,b;
cin>>a>>b;
if(a<b)swap(a,b);
ex_Eulid(a,b);
printf("%d=(%d)*%d+(%d)*%d\n",q,x,a,y,b);
return 0;
}

题目实际上就是: 给定 a 和b。

a 要有逆元 , 那么gcd( a , b ) = 1

假设a的逆元 为x , 那么就有 a * x mod b = 1

也就是 a * x + b * y = 1

上面的程序中输入a和b就可以求出对应的x和y。

其中 x 就是 a的逆元。

扩展的欧几里德算法求乘法逆元_扩展的欧几里得算法