题解(有不足欢迎指正)
2025-08-18 18:42:27
发布于:浙江
1阅读
0回复
0点赞
本题的主要难点是判断a×b是否是素数的方法,若直接判断他们的乘积,则可能会产生超时的后果,所以应该将它们拆分成小问题进行判断。下面是我的代码:
#include <bits/stdc++.h>
#define int long long // 将所有int类型转换成long long,因为数据范围最大为1e11
using namespace std;
int t, a, b;
bool is_prime(int x) {
if (x == 1) {
return false;
}
if (x == 2) {
return true;
}
for (int i = 2; i <= sqrt(x); i++) {
if (x % i == 0) {
return false;
}
}
return true;
}
signed main () {
cin >> t;
while (t--) { // t个测试用例
cin >> a >> b;
if (a == 1 && b == 1) { // 如果a、b=1,直接输出NO
cout << "NO\n";
continue;
}
if (is_prime(a) && is_prime(b)) { // 若a、b为素数,相乘肯定不为素数,输出NO
cout << "NO\n";
continue;
}
if (!is_prime(a) && a != 1 || !is_prime(b) && b != 1) { // a、b不为素数且a、b不为1,输出NO
cout << "NO\n";
continue;
}
cout << "YES\n"; // 其余情况都为素数
}
return 0;
}
这里空空如也
有帮助,赞一个