题目简述
给你一个长度为 $N$ 的 $a$ 数组($a$ 数组的元素是 $l$ 到 $r$ 区间中的整数),你可以进行 $k$ 此操作,每次操作可以选择两个数,将他们的乘积加入 $a$ 数组并且删除这两个数,问 $k$ 此操作后能否使 $\gcd(a)$ 大于 $1$
思路
很容易想到要让每个奇数与偶数相乘,很容易算出数组中的奇数个数(即最小操作次数),并且对 $L = R$ 特判即可
代码
#include <bits/stdc++.h>
using namespace std;
template<class T>
inline char read(T &ret) {
ret = 0;
char c = getchar();
short f = 1;
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c <= '9' && c >= '0') {
ret = (ret << 3) + (ret << 1) + c - 48;
c = getchar();
}
ret *= f;
return c;
}
int T;
int L , R , K;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> T;
while(T--) {
cin >> L >> R >> K;
int Count = 0;
if(L % 2 == 0 && R % 2 == 1) {
Count = (R - L + 1) / 2;
}
else if(L % 2 == 0 && R % 2 == 0) {
Count = (R - L + 1) / 2 + 1;
}
else if(L % 2 == 1 && R % 2 == 0) {
Count = (R - L + 1) / 2;
}
else if(L % 2 == 1 && R % 2 == 1) {
Count = (R - L + 1) / 2;
}
if(L == R) {
if(L == 1) cout << "NO" << endl;
else if(L != 1) cout << "YES" << endl;
}
else if(R - L + 1 - Count > K) cout << "NO" << endl;
else cout << "YES" << endl;
}
return 0;
}