标签:
Description
Input
Output
Sample Input
Sample Output
1 #include <stdio.h> 2 void gcd(int a,int b,int &d,int &x,int &y) 3 { 4 if(!b) 5 { 6 d=a; 7 x=1; 8 y=0; 9 } 10 else 11 { 12 gcd(b,a%b,d,y,x); 13 //printf("a=%d b=%d d=%d y=%d x=%d\n",a,b,d,y,x); 14 y-=x*(a/b); 15 //printf("y=-%d*(%d/%d) %d \n",x,a,b,y); 16 } 17 } 18 19 int main() 20 { 21 int a,b,d,x,y; 22 while(scanf("%d%d",&a,&b)==2) 23 { 24 gcd(a,b,d,x,y); 25 if(d==1) //d=gcd(a,b),d为a,b的最大公约数。 26 { 27 if(x>0) 28 printf("%d %d\n",x,y); 29 else 30 { 31 while(x<=0) //求另外的解 例如:5x+6y=1 第一种解:x=-1,y=1 第二种 x=5 y=-4 32 { // 这里通过x=x+b和y=y-a来算。 就等于 (x+b)*a+(y-a)*b 最终算式结果还是不变的 33 x+=b; 34 y-=a; 35 } 36 printf("%d %d\n",x,y); 37 } 38 } 39 else 40 printf("sorry\n"); 41 } 42 return 0; 43 } 44 /*int main() 45 { 46 int a,b,d,x,y; 47 while(scanf("%d%d",&a,&b)==2) 48 { 49 gcd(a,b,d,x,y); 50 //printf("%d %d %d\n",x,y,d); 51 if(x%d==0&&y%d==0&&x/d>0) 52 printf("%d %d\n",x/d,y/d); 53 else 54 printf("sorry\n"); 55 } 56 return 0; 57 }*/
网上的:
1 #include<cstdio> 2 using namespace std; 3 int exgcd(int a,int b,int &x,int &y) 4 { 5 if(b==0) 6 { 7 x=1; 8 y=0; 9 return a; 10 } 11 int r=exgcd(b,a%b,x,y); 12 //printf("a=%d b=%d\n",a,b); 13 int t=x; 14 //printf("t=%d\n",x); 15 x=y; 16 //printf("x=%d\n",y); 17 y=t-a/b*y; 18 //printf("y=%d\n",y); 19 return r; 20 } 21 int main() 22 { 23 int a,b,x,y,m; 24 while(scanf("%d%d",&a,&b)!=EOF) 25 { 26 27 m=exgcd(a,b,x,y); 28 if(m==1) 29 { 30 while(x<0) 31 { 32 x+=b; 33 y-=a; 34 } 35 printf("%d %d\n",x,y); 36 } 37 38 else 39 printf("sorry\n"); 40 } 41 return 0; 42 }
标签:
原文地址:http://www.cnblogs.com/huangguodong/p/4741443.html