python3之1007.素数对猜想 (20分)
来源:互联网 发布:隐藏手机号打电话软件 编辑:程序博客网 时间:2024/06/07 21:56
题目赘述如下:
让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:20输出样例:
4题目解析:
题目仍然是不难理解,也不难写,素数的判断是编程基本功,然后判断i和i+2是否是素数对。
本题争议最大的地方乃最后一个测试点,暴力求解往往超时,需要简要优化算法,如下代码测试最后一个测试点用时222ms,效果还不错,可堪重用。
import mathdef sushu(num): # 判断素数的函数,注意传入的num已经全是奇数了,故从3开始判断每个奇数是否是因数 for i in range(3,int(math.sqrt(num))+1,2): if num % i == 0: return False return Trueif __name__ == '__main__': n = int(input()) con = 0 # 素数对计数 f1 = sushu(3) # f1和f2存入相邻两个数字的素数状态,如此可以避免下一次重复判断素数 for i in range(3,n-1,2): # 素数对最小为3,5;此处从3开始进行判断,并跳过偶数 f2 = sushu(i+2) if f1 and f2: con+= 1 f1 = f2 print(con)
要点归纳:
主要是算法优化,一是将偶数过滤掉不进行处理,二是f1和f2的使用避免i+2在下一个循环中重复计算。
希望各位支持!不吝指教
阅读全文
0 0
- python3之1007.素数对猜想 (20分)
- 自测-2 素数对猜想 (20分)
- 自测-2 素数对猜想 (20分)
- 5-27 素数对猜想 (20分)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 【机器学习】sklearn.metrics绩效指标实例
- 习题3.3
- 异步任务神器 Celery 快速入门教程
- (5)HBase 1.2.6伪分布安装
- 动态规划
- python3之1007.素数对猜想 (20分)
- MySQL 5.7.9版本sql_mode=only_full_group_by问题 用到GROUP BY 语句查询时com.mysql.jdbc.exceptions.jdbc4.MySQLSyn
- 中北大学NUC2017新生赛1010/NOJ-1990
- 配置防火墙端口访问
- cpp:变量的定义与Java中的不同
- 常见的五类排序算法图解和实现(交换类:冒泡排序,递归的快速排序)
- Android 性能优化系列
- mysql中union,左连接,右连接,与内连接
- 数论之旅(一): 逆元逆元!