PAT(Basic Level) Practice——1007 素数对猜想

版权声明:余生请多指教,欢迎交流学习: https://blog.csdn.net/LYS20121202/article/details/84436678

原题目:

让我们定义d​n​​为:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i个素数。显然有d​1​​=1,且对于n>1有d​n​​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N(<10​5​​),请计算不超过N的满足猜想的素数对的个数。

输入格式:

输入在一行给出正整数N

输出格式:

在一行中输出不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4

分析:

1.根据题目中所给素数对的猜想,即在题目要求的范围内相差为2的相邻素数有多少个。因此我的方法是从2开始向正整数N判断,若当前值为素数,且加2后满足小于等于N且为素数,则执行操作+1,最后打印结果。

代码:

 C语言版:

#include <stdio.h>
#include <stdlib.h>
//函数用于判断是否为素数,
int isPrime(int n)
{
    int t=1,i=2;
    for(i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)
        {
            return 0;
        }
    }
    return 1;

}

int main()
{
    //num 为读入的数,flag为符合题目的个数,tag_1 tag_2分别是两次判断的标记
    int num,flag=0,tag_1=0,tag_2=0,i=0;
    scanf("%d",&num);
    for(i=2;i<num;i++)
    {
        tag_1=isPrime(i);//第一次判断
        if(tag_1==1)//满足条件则判断+2后的值
        {
            if(i+2<=num)
            {
                tag_2=isPrime(i+2);//加2的值的判断
                if(tag_2==1)//满足条件
                {
                    flag++;//计数加一
                }
            }
            else
            {
                break;
            }
        }
    }
    printf("%d\n",flag);//打印结果
    return 0;
}

猜你喜欢

转载自blog.csdn.net/LYS20121202/article/details/84436678
今日推荐