题目详情 - 1156 Sexy Primes (pintia.cn)
Sexy primes are pairs of primes of the form (p, p+6), so-named since "sex" is the Latin word for "six". (Quoted from http://mathworld.wolfram.com/SexyPrimes.html)
Now given an integer, you are supposed to tell if it is a sexy prime.
Input Specification:
Each input file contains one test case. Each case gives a positive integer N (≤108).
Output Specification:
For each case, print in a line Yes
if N is a sexy prime, then print in the next line the other sexy prime paired with N (if the answer is not unique, output the smaller number). Or if N is not a sexy prime, print No
instead, then print in the next line the smallest sexy prime which is larger than N.
Sample Input 1:
47
Sample Output 1:
Yes
41
Sample Input 2:
21
Sample Output 2:
No
23
思路如下:
简单的试除法
代码如下:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
bool check(int x)
{
if (x < 2) return false;
for (int i = 2; i <= x / i; i++)
if (x % i == 0)
return false;
return true;
}
int main() {
ios::sync_with_stdio(false);
cout.tie(nullptr);
int n;
cin >> n;
if(check(n) && n > 6 && check(n - 6)) {
cout << "Yes\n";
cout << n - 6;
return 0;
}
if(check(n) && n > 6 && check(n + 6)) {
cout << "Yes\n";
cout << n + 6;
return 0;
}
if(check(n) && n <= 6 && check(n + 6)) {
cout << "Yes\n";
cout << n + 6;
return 0;
}
cout << "No\n";
bool ok = false;
for(int i = n; ; i ++) {
if(check(i) && check(i + 6) || check(i) && check(i - 6)) {
cout << i;
ok = true;
break;
}
if(ok) break;
}
return 0;
}