英文题目
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
中文题目(乙级第4题同题)
性感素数 (20 分)
“性感素数”是指形如 (p, p+6) 这样的一对素数。之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。(原文摘自 http://mathworld.wolfram.com/SexyPrimes.html)
现给定一个整数,请你判断其是否为一个性感素数。
输入格式:
输入在一行中给出一个正整数 N (≤10^8)。
输出格式:
若 N 是一个性感素数,则在一行中输出 Yes,并在第二行输出与 N 配对的另一个性感素数(若这样的数不唯一,输出较小的那个)。若 N 不是性感素数,则在一行中输出 No,然后在第二行输出大于 N 的最小性感素数。
代码
#include<iostream>
using namespace std;
bool f(int n){
if(n<2)return false;
if(n==2)return true;
for(int i=2;i*i<=n;i++){
if(n%i==0)return false;
}
return true;
}
int main(){
int n;
cin>>n;
if(f(n)){
if(f(n-6)){
cout<<"Yes\n"<<n-6;
return 0;
}
else if(f(n+6)){
cout<<"Yes\n"<<n+6;
return 0;
}
}
cout<<"No\n";
for(int i=n+1;i<999999999;i++){
if(f(i)&&f(i+6)){
cout<<i;
return 0;
}
if(f(i)&&f(i-6)){
cout<<i;
return 0;
}
}
return 0;
}
如果喜欢我的文章,请给我点赞哦!