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;
}

评论已关闭