扩展欧几里德


在辗转相除gcd(a,b)的基础上加以扩展

可以得到使等式 a*x+b*y=1 成立的解



#include<iostream>
using namespace std;
int x,y;

int gcd(int a, int b)
{
	return b == 0 ? a : gcd(b, a % b);
}

int exgcd(int a,int b,int &x,int &y)
{
	if(b==0) { x=1, y=0; return a; }
   int res=exgcd(b,a%b,y,x);
   y-= a/b*x;
   return res;
}

int main()
{
	int a,b;
	while(cin>>a>>b)
	{
		if(a<b) swap(a,b);
		printf("%d = %d*%d + %d*%d \n",exgcd(a,b,x,y),x,a,y,b);
	}
}


你可能感兴趣的:(扩展)