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 (≤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
思路:
按照题目要求,如果给出的num
是素数。且num - 6
也是素数,则输出Yes
,并输出num - 6
;或者num + 6
也是素数,则输出Yes
,并输出num + 6
。如果不满足上述条件,则让num
自增,直至满足其一。需要注意的是,小于等于1的都不是素数。
#include<iostream>
using namespace std;
bool isPrime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
int main() {
int num;
cin >> num;
bool sexy = false;
if (isPrime(num)) {
if (isPrime(num - 6)) {
sexy = true;
printf("Yes\n%d\n", num - 6);
}
else if (isPrime(num + 6)) {
sexy = true;
printf("Yes\n%d\n", num + 6);
}
}
if (!sexy) {
while (true) {
while (!isPrime(num)) {
++num;
}
if (isPrime(num - 6) || isPrime(num + 6)) {
break;
}
else ++num;
}
printf("No\n%d\n", num);
}
}