目录
题目
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
思路
这题简单到离谱的地步!
唯一需要注意的点是测试点2:素数应该是一个正数,所以在判断n-6是否是素数之前要先判断一下n-6是否是正数。
代码
#include <iostream>
#include <cmath>
using namespace std;
// 判断x是否为素数
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 argc, char** argv) {
int n;
cin>>n;
if(isPrime(n)) {
if(n-6>0&&isPrime(n-6)) {
printf("Yes\n%d",n-6);
return 0;
}else if(isPrime(n+6)) {
printf("Yes\n%d",n+6);
return 0;
}
}
cout<<"No"<<endl;
while(true) {
n++;
if(isPrime(n)&&(n-6>0&&isPrime(n-6)||isPrime(n+6))) {
cout<<n;
break;
}
}
return 0;
}