PAT Basic 1007. 素数对猜想

PAT Basic 1007. 素数对猜想

1. 题目描述:

让我们定义\(d_n\)为:\(d_n=p_{n+1}−p_n\),其中\(p_i\)是第\(i\)个素数。显然有\(d_1=1\),且对于\(n>1\)\(d_n\)是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

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

2. 输入格式:

输入在一行给出正整数N

3. 输出格式:

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

4. 输入样例:

20

5. 输出样例:

4

6. 性能要求:

Code Size Limit
16 KB
Time Limit
200 ms
Memory Limit
64 MB

思路:

比较直接的思路,写一个判断素数的子函数,然后依次遍历2到N之间的数字进行统计。

这里注意判断素数只用遍历到数字的sqrt()即可,另外用到了stdbool.h用于定义bool类型,现在回看时我都忘了当时还有这操作233。

这种暴力搜索即可满足时间要求,只能感叹计算机的速度之快,另外这个素数对猜想还叫孪生素数猜想,正好刷到李永乐老师讲的关于张益唐的故事,感兴趣的可以去看看~

My Code:

#include <stdio.h>
#include <math.h>
#include <stdbool.h>

bool isPrime(int num);

int main(void)
{
    int inputN = 0;
    int count = 0;
    
    scanf("%d", &inputN);
    
    for(int i = 2; i <= inputN-2; i++)
    {
        if(isPrime(i) && isPrime(i+2)) count++;
    }
    
    printf("%d", count);
    
    return 0;
}

bool isPrime(int num)
{
    for(int i = 2; i <= sqrt(num); i++)
    {
        if(num % i == 0) return false;
    }
    
    return true;
}
posted @ 2023-02-25 10:11  十豆加日月  阅读(17)  评论(0编辑  收藏  举报