uva10673-扩展欧几里得

来源:互联网 发布:编辑数据透视图编辑区 编辑:程序博客网 时间:2024/06/08 17:50

给出x, k, 求 x = p * 下取整(x / k) + q * 上取整(x / k) 的一组解p, q

直接用扩展欧几里得即可


代码:

# include <iostream># include <algorithm># include <cstdio># include <cstring># include <cmath>using namespace std;typedef long long LL;int x, k;int exgcd(int a, int b, int& x, int& y) {    if (!b) {        x = 1; y = 0;        return a;    }    int g = exgcd(b, a % b, y, x);    y -= a / b * x;    return g;}int main(void){    int T; scanf("%d", &T);    while (T-- && scanf("%d %d", &x, &k)) {        int a = (int)floor(x * 1.0 / k);        int b = (int)ceil(x * 1.0 / k);        int p, q;        int g = exgcd(a, b, p, q);        p = p * x / g; q = q * x / g;        printf("%d %d\n", p, q);    }    return 0;}


原创粉丝点击