UVA 10673

扩展欧几里德算法

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\n", p, q);
    }

    return 0;
}

posted @ 2014-07-23 10:46  Mr.XuJH  阅读(160)  评论(0编辑  收藏  举报