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
解题思路:sexy数的条件是本身是素数,加6或者减6也是素数,注意当它本身是素数的时候,先判断减6的情况,再判断加6。
#include <iostream>
#include <cmath>
using namespace std;
bool isprime(int x){
if(x <= 1)
return false;
for(int i = 2; i <= sqrt(x); ++ i)
if(x % i == 0)
return false;
return true;
}
int main(){
int x, ans;
scanf("%d", &x);
if(isprime(x)){
if(isprime(x - 6)){
printf("Yes\n%d", x - 6);
return 0;
}
if(isprime(x + 6)){
printf("Yes\n%d", x + 6);
return 0;
}
}
ans = x + 1;
while(!(isprime(ans) && (isprime(ans - 6) || isprime(ans + 6))))
ans ++;
printf("No\n%d",ans);
}