扩展欧几里德算法
http://blog.sina.com.cn/s/blog_7064e7850100yeu1.html###
(一篇很有用的文章)
UVA 10673就能很快的算出来了
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
ll x, k;
void exgcd(ll a, ll b, ll &d, ll &x, ll &y)
{
if( b == 0 ) { d = a; x = 1; y = 0; }
else { exgcd(b, a%b, d, y, x); y -= x*(a/b); }
}
int main()
{
int n;
scanf("%d", &n);
while(n--)
{
scanf("%lld %lld", &x, &k);
ll a, b;
a = floor( (double)x/k );
b = ceil( (double)x/k );
ll d, p, q;
exgcd(a, b, d, p, q);
p *= (x/d);
q *= (x/d);
printf("%lld %lld
", p, q);
}
return 0;
}