题解:CF2043D Problem about GCD
Bc2_Ch1ckenPr1nce · · 题解
Sol
我们充分发挥人类智慧,由于
那么我们可以这么转化:
令
但由于
因为
即
我们可以考虑枚举
虽然这看起来会超时,但由于某些原因,这可以通过本题。
具体证明可以参考 Atcoder arc137_a。
Code
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
const int kMaxN = 2e5 + 20;
ll l, r, g, a, b, d;
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t;
for (cin >> t; t; -- t) {
cin >> l >> r >> g, a = b = -1;
l = (l + g - 1) / g, r = r / g;
d = r - l;
for (; d >= 0; -- d) {
for (ll i = l; i <= r - d; ++ i) {
if (__gcd(i, i + d) == 1) {
a = i * g, b = (i + d) * g;
break;
}
}
if (a != -1 && b != -1) {
break;
}
}
cout << a << ' ' << b << '\n';
}
return 0;
}