PAT (Basic Level) Practice (中文)1099 性感素数(20分)

简介: “性感素数”是指形如 (p, p+6) 这样的一对素数。之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。(原文摘自 http://mathworld.wolfram.com/SexyPrimes.html)现给定一个整数,请你判断其是否为一个性感素数。

“性感素数”是指形如 (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
C++:
#include<bits/stdc++.h>
using namespace std;
bool judge(int x);          //用来判断该数是否为素数
int main()
{
    int n;
    cin>>n;
    if(judge(n)&& ( judge(n+6)||judge(n-6) )) //满足n和n+6都为素数或n和n-6都为素数的才为性感素数
    {
        cout<<"Yes"<<endl;        //若n满足条件则输出Yes
        if(judge(n-6))           //若与该性感素数匹配的性感素数不唯一则输出较小的那个
            cout<<n-6;
        else
            cout<<n+6;
    }
    else
    {
        cout<<"No"<<endl;        //若n不满足条件则输出No
        for(int i=n+1; ;i++)     //  然后遍历找出比n大的最小性感素数
        {
            if(judge(i)&&  ( judge(i-6)||judge(i+6) ))
            {
                cout<<i;         //找到后输出并结束程序
                break;
            }
        }
    }
}
bool judge(int x)  
{
    if(x<=1)              //小于等于1的数都为假(false)即不是素数
        return false;     
    else
    {
        for(int i=2;i<=sqrt(x);i++)    //判断>=2的数是否为素数
        {
            if(x%i==0)                   //如果该数能被除1和本身之外的数整除的话就是假(false)
                return false;
        }
        return true;                     //反之则为真(true)
    }
}
C语言:
#include<stdio.h>
#include<math.h>
bool judge(int x);          //用来判断该数是否为素数
int main()
{
    int n;
    scanf("%d",&n);
    if(judge(n)&& ( judge(n+6)||judge(n-6) )) //满足n和n+6都为素数或n和n-6都为素数的才为性感素数
    {
        printf("Yes\n");       //若n满足条件则输出Yes
        if(judge(n-6))           //若与该性感素数匹配的性感素数不唯一则输出较小的那个
           printf("%d",n-6);
        else
            printf("%d",n+6);
    }
    else
    {
         printf("No\n");       //若n不满足条件则输出No
        for(int i=n+1; ;i++)     //  然后遍历找出比n大的最小性感素数
        {
            if(judge(i)&&  ( judge(i-6)||judge(i+6) ))
            {
                printf("%d",i);         //找到后输出并结束程序
                break;
            }
        }
    }
}
bool judge(int x)  
{
    if(x<=1)              //小于等于1的数都为假(false)即不是素数
        return false;     
    else
    {
        for(int i=2;i<=sqrt(x);i++)    //判断>=2的数是否为素数
        {
            if(x%i==0)                   //如果该数能被除1和本身之外的数整除的话就是假(false)
                return false;
        }
        return true;                     //反之则为真(true)
    }
}


相关文章
|
存储 测试技术
PAT (Basic Level) Practice (中文) 1004 成绩排名 (20 分)
PAT (Basic Level) Practice (中文) 1004 成绩排名 (20 分)
63 0
|
算法
PAT (Basic Level) Practice (中文)1028. 人口普查(20分)
PAT (Basic Level) Practice (中文)1028. 人口普查(20分)
76 0
PAT (Basic Level) Practice (中文) 1036 跟奥巴马一起编程 (15 分) p89
PAT (Basic Level) Practice (中文) 1036 跟奥巴马一起编程 (15 分) p89
126 0
PAT (Basic Level) Practice (中文) 1010 一元多项式求导 (25 分)
PAT (Basic Level) Practice (中文) 1010 一元多项式求导 (25 分)
72 0
|
测试技术
PAT (Basic Level) Practice (中文)1012 数字分类 (20 分)+易错测试点
PAT (Basic Level) Practice (中文)1012 数字分类 (20 分)+易错测试点
97 0
PAT (Basic Level) Practice (中文)1012 数字分类 (20 分)+易错测试点
|
存储
PAT (Basic Level) Practice (中文) 1041 考试座位号 (15 分)
PAT (Basic Level) Practice (中文) 1041 考试座位号 (15 分)
64 0
PAT (Basic Level) Practice (中文) 1041 考试座位号 (15 分)
PAT (Basic Level) Practice (中文) B1046 划拳 (15 分)
PAT (Basic Level) Practice (中文) B1046 划拳 (15 分)
59 0
|
测试技术
PAT (Basic Level) Practice (中文) B1011 A+B 和 C (15 分)
PAT (Basic Level) Practice (中文) B1011 A+B 和 C (15 分)
76 0
PAT (Basic Level) Practice (中文) B1011 A+B 和 C (15 分)
|
存储 人工智能
PAT (Basic Level) Practice (中文)- 1030 完美数列(25 分)
PAT (Basic Level) Practice (中文)- 1030 完美数列(25 分)
71 0
PAT (Basic Level) Practice (中文)- 1050 螺旋矩阵(25 分)
PAT (Basic Level) Practice (中文)- 1050 螺旋矩阵(25 分)
79 0