最开始就理解错题意了
每次都要判断比该数大6或者小6的情况。
最开始我想着既然原数不是sexy prime则肯定在大于6的情况中找,但是我忽略了n到n+6这之间的数,与它小6的数构成sexy primes
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <cctype>
#include <unordered_map>
#include <map>
using namespace std;
const int N = 105;
typedef pair<int, string> PII;
bool isprime(int x){
if(x <= 1) return false;
int sq = sqrt(x);
for(int i = 2; i <= sq; i++){
if(x % i == 0) return false;
}
return true;
}
int main() {
int n;
cin>>n;
if(isprime(n)){
int a = n - 6, b = n + 6;
if(isprime(a)){
cout<<"Yes"<<endl;
cout<<a<<endl;
}else if(isprime(b)){
cout<<"Yes"<<endl;
cout<<b<<endl;
}else{
int k = n+1;
while(1){
while(!isprime(k)) k++;
int a = k - 6, b = k + 6;
if(isprime(a)){
cout<<"No"<<endl;
cout<<k<<endl;
break;
}else if(isprime(b)){
cout<<"No"<<endl;
cout<<k<<endl;
break;
}
k++;
}
}
}else {
int k = n+1;
while(1){
while(!isprime(k)) k++;
int a = k - 6, b = k + 6;
if(isprime(a)){
cout<<"No"<<endl;
cout<<k<<endl;
break;
}else if(isprime(b)){
cout<<"No"<<endl;
cout<<k<<endl;
break;
}
k++;
}
}
return 0;
}