首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于扩展欧几里德的有关问题

2013-01-04 
关于扩展欧几里德的问题题目是uva 10104 - Euclid Problemhttp://uva.onlinejudge.org/index.php?optionc

关于扩展欧几里德的问题
题目是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
[解决办法]
这个应该不能保证吧?似乎需要自己处理一下。

引用:
引用:
题目是uva 10104 - Euclid Problemhttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&amp;amp;Itemid=8&amp;amp;page=show_problem&amp;amp;category=&amp;amp;problem=1045&amp;amp;mosmsg=S……

热点排行