Problem Description
Girls are clever and bright. In HDU every girl like math. Every girl like to solve math problem!
Now tell you two nonnegative integer a and b. Find the nonnegative integer X and integer Y to satisfy X*a + Y*b = 1. If no such answer print "sorry" instead.
Input
The input contains multiple test cases.
Each case two nonnegative integer a,b (0<a, b<=2^31)
Each case two nonnegative integer a,b (0<a, b<=2^31)
Output
output nonnegative integer X and integer Y, if there are more answers than the X smaller one will be choosed. If no answer put "sorry" instead.
Sample Input
77 51 10 44 34 79
Sample Output
2 -3 sorry 7 -3
思路:扩展欧几里得算法,对于两个数字最大公因子是否为1进行判断,之后再分别讨论。
#include <iostream> #include<cstdio> using namespace std; int x,y; int gcd(int a,int b) { int t,g; if(b==0) { x=1; y=0; return a; } g=gcd(b,a%b); t=x; x=y; y=t-a/b*y; return g; } int main() { int a,b; while(scanf("%d%d",&a,&b)==2) { int g=gcd(a,b); if(g!=1) printf("sorry\n"); else { while(x<=0) { x=x+b; y=y-a; } //假设d=gcd(a,b). 那么x=x0+b/d*t; y=y0-a/d*t;其中t为任意常整数 printf("%d %d\n",x,y); } } return 0; }