题目:1007 素数对猜想 (20 分)
让我们定义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 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <sstream> 5 #include <cmath> 6 #include <algorithm> 7 #include <string> 8 #include <stack> 9 #include <queue> 10 #include <vector> 11 #include <map> 12 using namespace std; 13 #define MAXN 100005 14 int prime[MAXN]; 15 int su[MAXN]; 16 17 void isprime() 18 { 19 int cnt = 0; 20 memset(prime, 1, sizeof(prime)); 21 prime[0] = prime[1] = 0; 22 for(int i = 2; i <= MAXN; i++) 23 { 24 if(prime[i]) 25 su[cnt++] = i; 26 for(int j = i * 2; j <= MAXN; j += i) 27 prime[j] = 0; 28 } 29 } 30 31 int main() 32 { 33 int n, sum = 0; 34 isprime(); 35 scanf("%d", &n); 36 for(int i = 1; su[i] <= n; i++) 37 { 38 // printf("su[%d] = %d\n", i, su[i]); 39 if(su[i] - su[i-1] == 2) 40 sum++; 41 } 42 printf("%d\n", sum); 43 return 0; 44 } 45 46 /* 47 20 48 4 49 3 5 50 5 7 51 11 13 52 17 19 53 */
总结:
写完代码后测试点2没过,想了想进入循环的条件应该是su[i] <= n而不是su[i] < n,就完美的过了。
原文地址:https://www.cnblogs.com/Anber82/p/11227255.html
时间: 2024-10-11 10:29:29