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 (≤10^8).
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 <bits/stdc++.h>
using namespace std;
bool isprime(int n){
if(n <= 1) return false;
for(int i = 2; i * i <= n; ++i){
if(n % i == 0) return false;
}
return true;
}
int sol(int n){
if(isprime(n) && isprime(n - 6)) return n - 6;
else if(isprime(n) && isprime(n + 6)) return n + 6;
return 0;
}
int main()
{
int n, res = 0;
scanf("%d", &n);
res = sol(n);
if(res > 0){
printf("Yes\n%d", res);
}else{
++n;
while((res = sol(n)) == 0) ++n;
printf("No\n%d", n);
}
return 0;
}