hdu 赤裸欧几里得

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)
 

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
 

Author
yifenfei
 

Source
HDU女生专场公开赛——谁说女子不如男
 
http://acm.hdu.edu.cn/webcontest/contest_showproblem.php?pid=1015&ojid=0&cid=1980&hide=0

#include<stdio.h>
int x,y;
int gcd(int a,int b)
{
 __int64 t,d;
 if(b==0)
 {
  x=1;
  y=0;
  return a;
 }
 d=gcd(b,a%b);
 t=x;
 x=y;
 y=t-(a/b)*(y); 
    return d;
}
int main()
{
 int a,b,d,k;
     while(scanf("%d %d",&a,&b)!=EOF)
  {
   d=gcd(a,b);
   if(d!=1) printf("sorry\n");
   else
   {
              x=x*(1/d);
     k=x/(b/d);
     x=x-k*(b/d);
     y=y+a/d*k;
     if(x<0) {x=x+b/d;y=y-a/d;}
    
     printf("%d %d\n",x,y);
   }
  }
}
通解为x=x0+b/d*t
y=y-a/d*t
注意 如果x-b/d  则y+
x加则y减

你可能感兴趣的:(hdu 赤裸欧几里得)