PAT(乙)-1007. 素数对猜想 (20)
2016-12-07 13:24
363 查看
1007. 素数对猜想 (20)
让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
分析:题目的意思可以理解为两部分,首先,找出N以内所有的素数,然后在这些素数里,要是相邻的两个素数之差为2,则可以看作是一个素数对,最后输出这个素数对的个数。
首先先判断一个素数,我们知道,只能被1和自己本身整除的数称为素数。(例如2,3,5,7等)。因此,先写出一个素数判断的条件
int temp = sqrt(num); int i; for(i = 2; i <= temp; i++) { if(num % i == 0)//如果这个数被整除了 return 0;//返回0,即非素数 } return 1;//遍历完后仍不能被整除,返回1.即为素数。
然后分别将素数存入一个数组,每存入一个数后,立即进行判断其是否为素数对,即
if((a[num]-a[num-1])== 2) cot++;
AC代码如下:
#include <stdio.h> #include <stdlib.h> #include <math.h> #define MAXN 100000 int a[MAXN]; int isPrime(int num);//把素数判断写为一个函数 int main() { int num; scanf("%d",&num); memset(a,0,MAXN);//初始化存放素数的数组 int i,cnt1 = 2,cnt2 = 0;//cnt1为素数计数器,cnt2为素数对计数器 a[2] = 2;//2属于特殊素数,单独存放起来 //从3开始判断 for(i = 3; i <= num; i++){ if(isPrime(i)){ cnt1++; a[cnt1] = i; //判断素数对是否存在 if((a[cnt1]-a[cnt1-1])== 2){ cnt2++; } } } printf("%d",cnt2);//输出素数对的个数 return 0; } //判断是否为素数 int isPrime(int num){ int temp = sqrt(num); int i; for(i = 2; i <= temp; i++){ if(num % i == 0) return 0; } return 1; }
相关文章推荐
- PAT(乙)-1002. 写出这个数 (20)
- PAT(乙)-1006. 换个格式输出整数 (15)
- PAT(乙)-1008. 数组元素循环右移问题 (20)
- cocos2d - JS 判断当前场景是不是指定场景
- CSS3属性之Media Queries
- iOS使用WebView简单地应用内显示网页
- [STL] 排序函数sort和qsort的用法与区别
- MyDocument.exe病毒查杀方法
- CentOs 7 安装mysql5.7(二进制版本)
- H5项目常见问题及注意事项
- Android开发者的混淆使用手册
- PIX学习路径-2-PIXHAWK及其各配件的认识与装配注意
- MySql常用命令总结
- View的四个构造函数
- 京东云招募体验官 免费使用一月
- ios常用三方库
- VS2012开发工具BUG
- CSS3属性之线性渐变
- 15 个 Android 通用流行框架大全
- git reset 应用场景示例