PTA B1099 性感素数 C++
题目描述
“性感素数”是指形如 (p, p+6) 这样的一对素数。之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。(原文http://mathworld.wolfram.com/SexyPrimes.html)
现给定一个整数,请你判断其是否为一个性感素数。
输入格式
输入在一行中给出一个正整数 N (≤10 8 )。
输出格式
若 N 是一个性感素数,则在一行中输出 Yes,并在第二行输出与 N 配对的另一个性感素数(若这样的数不唯一,输出较小的那个)。若 N 不是性感素数,则在一行中输出 No,然后在第二行输出大于 N 的最小性感素数。
样例 #1
样例输入 #1
47
样例输出 #1
Yes
41
样例 #2
样例输入 #2
21
样例输出 #2
No
23
C++
#include<bits/stdc++.h>
using namespace std;
bool isprime(int a) {
//如果小于等于1 绝对不是素数
if(a<=1) return false;
//遍历[2,sqrt(a)] 如果有可以整除的数就不是素数
for(int i=2; i*i<=a; ++i) {
if(a%i==0) return false;
}
return true;
}
int n;
signed main() {
cin>>n;
//n-6或n+6是素数 本身也是素数,就是性感素数
if(isprime(n-6) and isprime(n)) {
cout<<"Yes\n"<<n-6;
} else if(isprime(n+6) and isprime(n)) {
cout<<"Yes\n"<<n+6;
} else {
cout<<"No\n";
//大于n的最小性感素数
for(int i=n+1;; ++i) {
if(isprime(i) and (isprime(i+6) or isprime(i-6))) {
cout<<i;
break;
}
}
}
return 0;
}
评论已关闭