题目描述
给定 n 对正整数 ai,bi,对于每对数,求出一组 xi,yi,使其满足 ai×xi+bi×yi=gcd(ai,bi)。
样例
输入样例:
2
4 6
8 18
输出样例:
-1 1
-2 1
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int exgcd(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
int d=exgcd(b,a%b,x,y);
int mid=x;
x=y;
y=mid-a/b*y;
return d;
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int a,b;
scanf("%d %d",&a,&b);
int x,y;
exgcd(a,b,x,y);
printf("%d %d\n",x,y);
}
return 0;
}
其实这个和y总的代码差不了多少,只不过是没有将x,y在递归时翻转而已,基本的思路和算法是一样的,只不过因为不翻转的话在更新x,y值时都会用到对方的值,所以要用一个中间变量mid存一下x(或y),这个比起另一种只弱不强,仅仅是为了推一遍活跃活跃思维罢了