PAT乙1007 素数对猜想

题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805317546655744

让我们定义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

分析:

筛法求素数打表,然后在数字0~n之间找到距离等于2的素数对个数即可

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 #define max 100000
 5 
 6 bool visit[max + 20000];
 7 int prime[max]; //要注意保证pirme[]数组足够存储[2,max]之间的素数
 8 
 9 void Getprime()
10 {
11     memset(visit, false, sizeof(visit));
12     int i, j, num = 0; //num统计素数个数
13     for (i = 2; i < max; i++)
14     {
15         if (!visit[i])
16             prime[num++] = i; //纪录素数
17         for (j = 0; j < num && i * prime[j] <= max; j++)
18         {
19             visit[i * prime[j]] = true; // 素数的倍数不是素数
20             if (i % prime[j] == 0)      //关键
21                 break;
22         }
23     }
24 }
25 int main()
26 {
27     Getprime();
28     int n;
29     scanf("%d", &n);
30     int count = 0;
31     for (int i = 0; prime[i + 1] <= n; i++)
32     {
33         if (prime[i + 1] - prime[i] == 2)
34             count++;
35     }
36     printf("%d\n", count);
37     return 0;
38 }

 

posted @ 2020-04-25 15:35  sqdtss  阅读(202)  评论(0编辑  收藏  举报