CF1872C 题解
思路
这道构造题我方法乱想的,分情况考虑:
- 当 时,则 之间肯定有一个偶数,只要选一个最大的偶数 对半分即可。特别需要注意的是,当 为 时,无解;
- 当 时,则我们需要枚举 每个非 因数,枚举到第一个因数 后,若 ,则答案就是 和 。不过这样枚举太慢了,我们只要枚举到 就够了,因为一个合数一定有只要一个 的非 因数。
代码
# include <bits/stdc++.h>
using namespace std;
int t, l, r;
bool f;
int main () {
cin >> t;
while (t --) {
cin >> l >> r;
f = 1;
if (r > 3 && (l < r || ! (l & 1)))
f = 0, cout << r / 2 << ' ' << r / 2 << '\n';
else
for (int i = 3; i * i <= l; ++ i)
if (! (l % i)) { //第一个因数
cout << l / i << ' ' << l - l / i << '\n';
f = 0;
break ;
}
if (f) //无解
cout << "-1\n";
}
return 0;
}

浙公网安备 33010602011771号