CF1872C 题解

洛谷传送门 & CF 传送门

思路

这道构造题我方法乱想的,分情况考虑:

  1. l<rl<r 时,则 lrl\sim r 之间肯定有一个偶数,只要选一个最大的偶数 r2×2\lfloor\frac r2\rfloor\times2 对半分即可。特别需要注意的是,当 r2\lfloor\frac r2\rfloor11 时,无解;
  2. l=rl=r 时,则我们需要枚举 ll 每个非 11 因数,枚举到第一个因数 xx 后,若 xlx\ne l,则答案就是 xxlx\frac lx。不过这样枚举太慢了,我们只要枚举到 l\lfloor\sqrt l\rfloor 就够了,因为一个合数一定有只要一个 l\le\lfloor\sqrt l\rfloor 的非 11 因数。

代码

# 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;
}
posted @ 2023-09-19 09:26  Vitamin_B  阅读(10)  评论(0)    收藏  举报  来源