# 质数 ## 题目描述 给定两个正整数 $a$ 和 $b$,你可以对这两个数执行如下操作: $1$、选定一个质数 $p$ $2$、让大数减去这个质数 $p$,可以多次减 最后使得 $a$ 和 $b$ 的值相等 现在只需要你对给定的 $a$ 和 $b$,回答是否能找到这个质数 $p$ 注意本题有多组数据 ## 输入格式 程序输入 $T+1$ 行 第一行一个正整数,表示数据组数 $T$ 接下来 $T$ 行,每行两个正整数,表示 $a$ 和 $b$,中间以空格隔开 ## 输出格式 程序输出 $T$ 行 对每组测试数组,若能找到这个质数 $p$,输出 $“YES”$,否则输出 $“NO”$ ## 样例 #1 ### 样例输入 #1 ``` 4 100 98 42 32 4399 100 41 40 ``` ### 样例输出 #1 ``` YES YES YES NO ``` ## 提示 对 $10$% 的数据,$T=1$ 对另外 $20$% 的数据,$T≤100$ 对 $100$% 的数据,$T≤1,000,1≤a,b≤10^{18}$c++代码
时间: 2023-09-08 15:09:06 浏览: 163
```cpp
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
bool isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
bool canFindPrime(int a, int b) {
if (a == b) {
return true;
}
int diff = abs(a - b);
if (diff == 1) {
return false;
}
if (isPrime(diff)) {
return true;
}
return false;
}
int main() {
int T;
cin >> T;
vector<pair<int, int>> testCases(T);
for (int i = 0; i < T; i++) {
cin >> testCases[i].first >> testCases[i].second;
}
for (int i = 0; i < T; i++) {
if (canFindPrime(testCases[i].first, testCases[i].second)) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
```
阅读全文