文章目录

  • 题目描述
  • 思路解析
  • C++实现
  • Python实现

题目描述

  让我们定义dnd_{n}dn​为dn=pn+1−pnd_{n}=p_{n+1}-p_{n}dn​=pn+1​−pn​,其中pip_{i}pi​是第iii个素数。显然有d1=1d_{1}=1d1​=1,且对于n>1n>1n>1有dnd_{n}dn​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

  现给定任意正整数N(<105<10^{5}<105​​ ),请计算不超过N的满足猜想的素数对的个数。

输入格式:

  输入在一行给出正整数N

输出格式:

  在一行中输出不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4

思路解析

  • c++

  这道题目的关键就在于找素数,用for循环判断每个数是不是素数,如果是再与前一个素数对比,若差值为2则计数count加1。

  素数的查找可以定义一个函数,对输入进来的数先开方得到kkk,然后做for循环到kkk,如果能被整除则不是素数。这里要注意任何数除1都能被整除,所以i要从2开始。

  如果没有找到素数的话iii就会大于kkk。如果输入的待验证数是1,则开方向下取整k=1k=1k=1,输入的待验证数是2、3同理。

  • python

  上述C++的思想python实现就炸了,超时了,因此想了好久,后来还是百度去看看找素数的时间复杂度能不能降到O(n)O(n)O(n),没想到还真有,大概的意思就是先创建一个数组all_num(2-input_num),对里面每个数只判断一遍是不是素数,判断的依据就是如果一个数是之前素数的倍数,那这个数就一定不是素数(由于2是素数,所以二的倍数全部设置为0,依此类推,如果循环到某个数大于0,就一定不是之前某个素数的倍数,就是一个素数啦)。

  有点绕,具体可以看代码。

C++实现

#include<stdio.h>
#include<math.h>int issushu(int num){int i;int k = (int)sqrt(num);for(i=2; i<=k;i++){if(num%i==0){return 0;}}if(i>k){return 1;}
}int main(){int input_num;int p_nn = 0;int p_n = 0;int count_num = 0;scanf("%d", &input_num);for(int i=0; i<=input_num; i++){if(issushu(i)){p_n = p_nn;p_nn = i;if(p_nn-p_n==2){count_num++;}}}printf("%d", count_num);
}

Python实现

input_num = int(input())
all_num = [i for i in range(0, input_num+1)]count = 0
p_n = 1
for i in all_num:if all_num[i] > 1:for j in range(2*i, input_num+1, i):all_num[j]=0if (all_num[i]-p_n)==2:count += 1p_n = all_num[i]print(count)

【浙江大学PAT真题练习乙级】1007 素数对猜想 (20分) 真题解析相关推荐

  1. C++学习之路 | PTA乙级—— 1007 素数对猜想 (20分)(精简)

    1007 素数对猜想 (20分) 让我们定义d ​n ​​ 为:d ​n ​​ =p ​n+1 ​​ −p ​n ​​ ,其中p ​i ​​ 是第i个素数.显然有d ​1 ​​ =1,且对于n> ...

  2. PAT(乙级) 1007 素数对猜想 (20 分)(C语言)

    分析:这道题在数字比较大的时候容易超时,需要更简单的算法,我这里采用了最原始最朴素的算法来处理,为了让所有测试点通过对源代码做了一点点修改 #include<stdio.h> int is ...

  3. 1007 素数对猜想 (20分)

    1007 素数对猜想 (20分) 让我们定义 ​​ 为:dn=pn+1−pnd_{n} = p_{n+1} - p_{n}dn​=pn+1​−pn​,其中pip_{i}pi​是第iii个素数.显然有d ...

  4. 1007 素数对猜想 (20分)(C语言)

    1007 素数对猜想 (20分) 让我们定义d ​n ​​ 为:d ​n ​​ =p ​n+1 ​​ −p ​n ​​ ,其中p ​i ​​ 是第i个素数.显然有d ​1 ​​ =1,且对于n> ...

  5. 满分最优解法:1007 素数对猜想 (20分)

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 让我们定义dn ​​ 为:dn=pn+1​−pn,其中pi是第i个素数.显然有d1=1,且对于n>1有d​ ...

  6. 1007 素数对猜想 (20 分)(c语言)

    让我们定义dn​为:dn​=pn+1​−pn​,其中pi​是第i个素数.显然有d1​=1,且对于n>1有dn​是偶数."素数对猜想"认为"存在无穷多对相邻且差为2的 ...

  7. 1007 素数对猜想 (20 分)测试点

    让我们定义d​n​​为:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i个素数.显然有d​1​​=1,且对于n>1有d​n​​是偶数."素数对猜想"认为" ...

  8. 【PAT乙级】1007 素数对猜想 (20 分)

    https://pintia.cn/problem-sets/994805260223102976/problems/994805317546655744 埃氏筛法 #include<cstdi ...

  9. 【PAT】1007. 素数对猜想 (20)

    1007. 素数对猜想 (20) 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数."素数对猜想" ...

  10. 1007. 素数对猜想 (20)-PAT乙级真题

    让我们定义 dn 为:dn = pn+1 – pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数."素数对猜想"认为"存在无穷多对相邻且 ...

最新文章

  1. Jquery- 错误消息Date未定义,String未定义
  2. 有向图生成树是如何画的_漫画:什么是最小生成树?
  3. Spring4.x(7)---对象的生命周期方法
  4. 废旧 Android 手机如何改造成 Linux 服务器?
  5. web myeclipse为什么连接不上css_Web技巧 (03)
  6. android 包名工具,查看包名(安卓应用包名查看工具)
  7. 人工智能--一种现代的方法(知识点总结第一章)
  8. 招标采购专业实务课程大纲--刘小明老师
  9. zend新建php项目,如何使用Zend Studio创建PHP项目
  10. 小米全系列机型代码查询与 制作rom分区架构图示
  11. 制作u盘winpe启动盘_u盘启动盘制作工具 纯净+好用,原来不止是 微pe
  12. 硕士论文结构分析与如何写作
  13. safari 插件安装之alipay
  14. Zynga和StarLark庆祝《Golf Rival》面世四周年
  15. 《互联网的那些事之时代》第二回:春江潮水连海平,海上明月共潮生
  16. 电商快递电子面单对接使用方法
  17. 高老师架构设计思考短句集(2)
  18. CAD数据文件格式DXF部分实体(圆弧、椭圆、凸度)解析[原理讲解+公式推导+java实现]
  19. 最好用的数学神器Mathpix Snip-公式神器,只要截图就能识别公式,手写的公式都能识别
  20. 使用火车头采集器笔记

热门文章

  1. 什么是SOHO一族?
  2. 047——VUE中css过渡动作实例
  3. Event事件-基础
  4. hdu - 5033 - Building(单调栈)
  5. AsnycTask的内部的实现机制
  6. 前端常用功能记录(一)
  7. python 如何运行程序
  8. CentOS+Apache+Mysql+Php安装及优化配置小记
  9. 社团报名系统php,php85高校学生社团管理系统
  10. java 文件下载 并发_高并发下载tomcat下的文件时,发生java.net.SocketException: Connection reset解决方案...