📢📢📢📣📣📣 🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜 🏅🏅🏅CSDN Python领域优质创作者,大二在读,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++) 💕
入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈 🌟🌟🌟✨✨✨
前言:
【Python训练营】是针对Python语言学习所打造的一场刷题狂欢party! 对基础知识把握不牢固的话,欢迎参考此套课程:Python公开课 搭配使用最佳嗷~喜欢的话就抓紧订阅起来吧!🍋🍋🍋如果对学习没有自制力或者没有一起学习交流的动力,欢迎私信或者在文末添加我的VX,我会拉你进学习交流群,我们一起交流学习,报团打卡
@TOC
题目描述
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
2,3,5,7,11,13,....2,3,5,7,11,13,.... 是素数序列。 类似:7,37,67,97,127,1577,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。 上边的数列公差为 3030,长度为 66。 20042004 年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。 这是数论领域一项惊人的成果! 有这一理论为基础,请你借助手中的计算机,满怀信心地搜索: 长度为 10 的等差素数列,其公差最小值是多少?
运行限制 最大运行时间:1s 最大运行内存: 128M
解题思路
- 首先写出一个函数来确定是否为素数,然后创建一个空列表存储每次的差值
- 找第一个素数,然后再
由大到小取最小的差值
,遍历此差值下的后9个数据,for k in range(i+j,i+j*11,j):
如果都是素数则满足条件,跳出此素数的循环,遍历下一个素数。 - 最后如果num不为空,则用用min()取num列表中最小的数据。
源码分享
# 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你! # @Time : 2022/1/20 20:40 # @Author : 是Dream呀! # @File : 等差素数列.py # 设置函数判断是否为素数。 def sushu(n): k = int(n ** 0.5) for i in range(2,k+1): if n%i == 0: return False return True num = [] for i in range(3,100,2):# 第一个素数 if sushu(i): for j in range(1,1000):# 设置一个方差 a = 0 # 设置参数a来统计等差素数的个数 for k in range(i+j,i+j*11,j):# 后9个数 if sushu(k): a += 1 if a == 9: num.append(j) break if len(num) == 0: print('no') else: print(min(num))
学习总结
1.for else
结构中,for循环遇到break退出之后就不会再运行else语句,只有在for循环中中没有break结束语句,才会运行else语句。2.判断素数时,遍历的范围大小:k = int(n ** 0.5) for i in range(2,k+1):
这样设置,可以大大减少运行时间,更好的满足所需时间限制。