给出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;
}