1007. 素数对猜想
2016-02-06 18:37
267 查看
让我们定义 dn 为:dn = pn+1 - pn,其中 pi
是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:
输出样例:
4
分析:先用两个变量存储头两个质数,寻找质数,找到后将两个变量中小的替换掉。判断两个质数是否相差2,如果是计数变量加一。继续循环,一直到N为止。
下列代码在VS2015中运行,若要在PAT上运行,只要修改scanf_s即可。
是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
分析:先用两个变量存储头两个质数,寻找质数,找到后将两个变量中小的替换掉。判断两个质数是否相差2,如果是计数变量加一。继续循环,一直到N为止。
下列代码在VS2015中运行,若要在PAT上运行,只要修改scanf_s即可。
#include<stdio.h> #include<math.h> #define swap(x,y) {int i; i=x;x=y;y=i;} int main(void) { int n = 0, i, j, count=0, temp; int previous = 2, later = 3; int flag = 0; scanf_s("%d", &n); for (i = 2; i <= n; i++) { temp = (int)sqrt(i); for (j = 2; j <= temp; j++) if (i%j == 0) { flag = 1; break; } if (flag == 0) { swap(previous, later); later = i; if (later - previous == 2) count++; } flag = 0; } printf("%d", count); return 0; }
相关文章推荐
- Hibernate中inverse="true"的理解
- NYOJ-102-次方求模
- JSON解析
- markdown学习
- 一年前的噩梦–记十年职业生涯最黑暗的项目经历
- NSURLConnection文件上传&&解压缩
- 12.Swift 中的关键字详解
- unity2D动画和图片切割
- Binary Classification Core PLA
- android日常开发60条经验
- c++中的&
- centos7引导项修复
- 程序设计七宗罪
- 王学岗高级控件滚动视图(一)
- POJ 3268 牛的最长来回时间
- 堆排序
- 百思学习笔记12-网络请求到推荐关注
- Linux常用命令
- [翻译]The Neophyte's Guide to Scala Part 12: Type Classes
- 树的最大独立集