"Número primo sensual" se refiere a un par de números primos de la forma (p, p+6). La razón de este nombre es que "seis" se llama "sexo" en latín (es decir, "sexy" en inglés). (Extracto original de http://mathworld.wolfram.com/SexyPrimes.html)
Ahora, dado un número entero, juzgue si es un número primo atractivo.
Formato de entrada:
La entrada da un número entero positivo N (≤108) en una línea.
Formato de salida:
Si N es un número primo atractivo, envíelo en una línea Yes
y genere otro número primo atractivo emparejado con N en la segunda línea (si dicho número no es único, genere el más pequeño). Si N no es un número primo atractivo, envíelo en una línea No
y luego genere el número primo atractivo más pequeño mayor que N en la segunda línea.
Muestra de entrada 1:
47
Muestra-1: "> Muestra-1: "> Muestra de salida 1:
Yes
41
Muestra de entrada 2:
21
Muestra de salida 2:
No
23
El punto a tener en cuenta es que al juzgar un número primo, se debe tener en cuenta que el número primo mínimo es 2 y cualquier número menor que 2 no es un número primo. Además, cuando N no es un número primo atractivo, cuando se busca un número primo atractivo mayor que N, el número M encontrado puede ser el mayor en el par de números primos atractivos, por lo que también se debe considerar isPrime(i-6).
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
bool isPrime(int num);
int main(){
int N;
cin>>N;
if(isPrime(N) && isPrime(N-6))
cout<<"Yes"<<endl<<N-6<<endl;
else if(isPrime(N) && isPrime(N+6))
cout<<"Yes"<<endl<<N+6<<endl;
else{
for(int i=N+1;;i++){
//i本身是质数,且i-6 或者 i+6 也是质数
if(isPrime(i)&&(isPrime(i+6)||isPrime(i-6))){
cout<<"No"<<endl<<i<<endl;
break;
}
}
}
return 0;
}
bool isPrime(int num){
if(num<2)
return false;
int n=sqrt(num);
for(int i=2;i<=n;i++)
if(num%i==0)
return false;
return true;
}