[PTA]自测-2 素数对猜想

Posted Spring-_-Bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PTA]自测-2 素数对猜想相关的知识,希望对你有一定的参考价值。

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

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

输入格式:

输入在一行给出正整数N。

输出格式:

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

输入样例:

20

输出样例:

4
  • 提交结果:

在这里插入图片描述

  • 源码:
#include<stdio.h>
#include<math.h>

int isPrime(int n);	// 判断num是否是素数,是则返回1,否则返回0

int main(void)
{
    int N;
    int currentPrime, nextPrime;    // 当前素数,下一个相邻的素数
    int count = 0;                  // 从3~N之间的素数对个数

    scanf("%d", &N);

    for (int i = 3; i <= N; i++)
    {
        if (isPrime(i))
        {
            // 找到一个素数,需要查找它的下一个相邻素数
            currentPrime = i;

            while (i <= N)
            {
                i++;    // 从相邻的下一个开始判断

                if (isPrime(i))
                {
                    // 找到下一个相邻的素数
                    nextPrime = i;

                    // 满足素数对条件
                    if (nextPrime - currentPrime == 2)
                    {
                        count++;
                    }

                    // i--,避免for循环i++导致当前素数不正确
                    i--;
                    break;
                }
            }
        }
    }

    printf("%d\\n", count);

    return 0;
}

// 判断num是否是素数,是则返回1,否则返回0
int isPrime(int n)
{
    if (n < 2)
    {
        return 0;
    }

    for (int i = 2; i <= sqrt(n); i++)
    {
        if (n % i == 0)
        {
            return 0;
        }
    }

    return 1;
}

以上是关于[PTA]自测-2 素数对猜想的主要内容,如果未能解决你的问题,请参考以下文章

pta-7-3素数对猜想(20分)

PTA 乙级 1007 素数对猜想 (20分)

[code] PTA 胡凡算法笔记 DAY045

[PTA]习题6-5 使用函数验证哥德巴赫猜想

[PTA]实验6-6 使用函数验证哥德巴赫猜想

[PTA]实验4-2-3 验证“哥德巴赫猜想”