标签:
Description
Input
Output
Sample Input
77 51 10 44 34 79
Sample Output
2 -3 sorry 7 -3
题意:
前面一大段话都是废话,不要看就好了,题目的意思是给你两个正整数a,b,yaoni 要你求出一个正整数X和一个整数Y使得X*a+Y *b=1;如果这种情况不存在,输出sorry,如果存在,输出最小的X。
思路:
这是一道扩展欧几里得算法题,我看了一下算法竞赛与入门经典中的P313,书上讲了一个类似的题目,还有参考了一个专门讲扩展欧几里得算法的博客,地址http://www.cnblogs.com/yuelingzhi/archive/2011/08/13/2137582.html ,看了看,看出一点名堂了,然后把代码贴上去KO了。
代码:
#include<cstdio> using namespace std; int exgcd(int a,int b,int &x,int &y) { if(b==0) { x=1; y=0; return a; } int r=exgcd(b,a%b,x,y); int t=x; x=y; y=t-a/b*y; return r; } int main() { int a,b,x,y,m; while(scanf("%d%d",&a,&b)!=EOF) { m=exgcd(a,b,x,y); if(m==1) { while(x<0) { x+=b; y-=a; } printf("%d %d\n",x,y); } else printf("sorry\n"); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/a1967919189/article/details/47757815