7-1 Sexy Primes (20 分)

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 

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;
}

你可能感兴趣的:(PAT(甲级))