“性感素数”是指形如 (p, p+6) 这样的一对素数。之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。(原文摘自 http://mathworld.wolfram.com/SexyPrimes.html)
现给定一个整数,请你判断其是否为一个性感素数。
输入格式:
输入在一行中给出一个正整数 N (≤108)。
输出格式:
若 N 是一个性感素数,则在一行中输出 Yes
,并在第二行输出与 N 配对的另一个性感素数(若这样的数不唯一,输出较小的那个)。若 N 不是性感素数,则在一行中输出 No
,然后在第二行输出大于 N 的最小性感素数。
输入样例 1:
47
输出样例 1:
Yes
41
输入样例 2:
21
输出样例 2:
No
23
分析:首先编写prime函数来判断一个数是否是素数,然后输入n。如果n是素数并且n-6和n+6其中至少有一个是素数,则输出Yes,并且如果n-6是素数,则输出n-6,否则输出n+6;否则,输出No,i从n+1开始寻找满足i是素数并且i-6或者i+6之中至少有一个是素数,则输出i并且退出循环。
#include <bits/stdc++.h>
using namespace std;
bool prime (int n){
if (n < 2)return false ;
for (int i = 2;i<= sqrt (n);i++){
if (n %i==0)return false ;
}
return true ;
}
int main() {
int n;
cin>>n;
if (prime(n) && (prime (n-6)|| prime (n+6))){
cout <<"Yes"<<endl;
if (prime(n-6)){
cout << n-6;
}
else {
cout <<n+6;
}
}
else {
cout <<"No"<<endl;
for (int i = n+1;;i++){
if ( prime (i)&& (prime (i-6)|| prime (i+6))){
cout << i;
break ;
}
}
}
return 0;
}