关于扩展欧几里德的问题
题目是uva 10104 - Euclid Problemhttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=1045&mosmsg=Submission+received+with+ID+10426142
题目大意是对于任何整数A和B, 一定存在一对整数X和Y使得AX+BY = D, 其中D是A和B的最大公约数。现给定A和B, 要求求出相应的X,Y,D.使得|X|+|Y|最小
输入:A与B
输出:X,Y,D。如果有多组满足条件的X和Y,应当保证X<=Y.
问题是为什么边界条件是X = 1, Y = 0时能保证最后的结果|X|+|Y|最小。X = 1, Y = 0时|X|+|Y| = 1,为当前这层递归的最小,当递归会去时为什么也能保证最小。。。。菜鸟求助
以下是AC代码
#include <stdio.h>
void gcd(long a, long b, long &d, long &x, long &y)
{
if(!b) {d = a; x = 1; y = 0;}
else
{
gcd(b, a%b, d, y, x);
y -= x*(a/b);
}
}
int main()
{
long a = 0, b = 0, d = 0, x = 0, y = 0;
while(scanf("%ld %ld", &a, &b) != EOF)
{
gcd(a, b, d, x, y);
printf("%ld %ld %ld\n", x, y, d);
}
return 0;
}
[解决办法]
条件说了,X和Y是整数。
d是公约数,所以d<=a<=b;
为了满足AX+BY=D,X最小为1,Y最小为0
[解决办法]
错了,d<=a,d<=b。如果有多组满足条件的X和Y,应当保证X<=Y.因为这个,x最小为1,y最小为0
[解决办法]
这个应该不能保证吧?似乎需要自己处理一下。