PAT 1007. 素数对猜想 (20)
2018-01-19 17:33
260 查看
题目概述:
让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:
每个测试输入包含1个测试用例,给出正整数N。
输出格式:
每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
思路:
找出N内的素数
然后判断是否符合猜想
结果参考:
1-4 : 0
20:4
100:8
1000:35
10000:205
100000:1224
这道题做的时候以为可以像之前那样直接通过标记解决问题,但似乎数值太大了,后来另外用一个数组进行存储,同时在素数判断的时候,通过sqrt(N)减少时间,再通过数组进行判断才解决了问题。
让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:
每个测试输入包含1个测试用例,给出正整数N。
输出格式:
每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
思路:
找出N内的素数
然后判断是否符合猜想
#include<stdio.h> #include<math.h> int N; //range int prime[10000] = { 0 }; //save all the rang of prime number in this array int count = 0; //to calculate the number of a prime number int flag; int main() { scanf("%d", &N); int temp = 0; for (int i = 2;i <= N;i++) { flag = 0; //sqrt(N) is to short of time for (int j = 2; j < sqrt(N); j++) { if (j == i) break; if (!(i % j)) //it's not a prime number { flag++; break; } } if (!flag) { prime[temp++] = i; //it's prime number } } for (int i = 0; i <= temp; i++) { if (prime[i + 1] - prime[i] == 2) count++; } //to find out the rang of the prime number //waste too much time /*for (int i = 2; i <= N+2; i++) { flag = 0; for (int j = 2; j < sqrt(N); j++) { if (j == i) break; if (!(i % j)) { flag++; break; } } if (!flag) 4000 flagn[i] = 1; }*/ //to judge whether it's agree the condition //not all trust /*for (int i = 1; i <= N; i++) { if (flagn[i]) { if (!flagn[i + 2]) count++; } }*/ printf("%d", count); return 0; }
结果参考:
1-4 : 0
20:4
100:8
1000:35
10000:205
100000:1224
这道题做的时候以为可以像之前那样直接通过标记解决问题,但似乎数值太大了,后来另外用一个数组进行存储,同时在素数判断的时候,通过sqrt(N)减少时间,再通过数组进行判断才解决了问题。
相关文章推荐
- PAT (Basic Level) Practise (中文) 1007素数对猜想 (20)
- PAT乙级1007. 素数对猜想(20)
- PAT(B)1007. 素数对猜想 (20)
- pat 1007. 素数对猜想 (20)
- PAT1007. 素数对猜想 (20)
- PAT 1007. 素数对猜想 (20) (C语言)
- 浙江大学PAT_乙级_1007. 素数对猜想 (20)
- PAT 乙级练习题1007. 素数对猜想 (20)
- PAT Basic Level 1007. 素数对猜想 (20)
- PAT(乙)-1007. 素数对猜想 (20)
- PAT - 1007. 素数对猜想 (20)
- pat1007.素数对猜想(20)
- PAT 乙级 1007. 素数对猜想 (20)
- 浙江大学考研—PAT—1007. 素数对猜想 (20)
- PAT BASIC LEVEL 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)——PAT乙级
- PAT(乙) 1007. 素数对猜想 (20)
- PAT 乙级 1007. 素数对猜想 (20) Java版
- PATBasic——1007. 素数对猜想 (20)
- PAT:1007. 素数对猜想 (20)