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

计算乘法逆元,比如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的逆元。

扩展的欧几里德算法求乘法逆元_第1张图片

你可能感兴趣的:(扩展的欧几里得算法,求乘法逆元)