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女生专场公开赛——谁说女子不如男
通过扩展欧几里得算法求得x,y之后,要求所有的x和y的解的话,得求得通项公式:(x+k*gx , y-k*gy) gx= b/gcd(a,b),gy = a/gcd(a,b)互素,k为任意整数
//15MS 228K
#include
#include
#include
#include
#include
#include
#define M 10007 #define inf 0x3f3f3f3f #define ll long long using namespace std; long long extended_euclidean(long long n, long long m, long long &x, long long &y) { if (m == 0) { x = 1; y = 0; return n; } long long g = extended_euclidean(m, n % m, x, y); long long t = x - n / m * y; x = y; y = t; return g; } int main() { ll a,b,x,y; while(scanf("%I64d%I64d",&a,&b)!=EOF) { ll d=extended_euclidean(a,b,x,y); if(1%d)printf("sorry\n"); else { while(x<0){x+=b;y-=a;} printf("%I64d %I64d\n",x,y); } } return 0; }