PAT乙1007 素数对猜想
题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805317546655744
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N(<105),请计算不超过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 }