目录
题目:
2,3,5,7,11,13,....是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为30,长度为6。
2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
这是数论领域一项惊人的成果!
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:
长度为10的等差素数列,其公差最小值是多少?
分析:
素数,指的是在一个数除了1和它本身外,不存在其他的因子。
公差,值得就是等差数列当中相邻两个元素的差值。
读完题目,发现题目的要求就是在素数之中找等差数列,最后找出公差最小的等差数列。
因此写代码时,首先第一步就是拿到一定范围内的素数,然后再在这个拿到的素数的集合之中,进行等差数列的元素的寻找。
那么问题就来了,应该如何判断一个元素是否在一个数列之中呢?下面这篇文章提供了三篇解决方法。
python判断列表中是否有某个数字_我的脑袋啊的博客-CSDN博客
程序:
#判断是否是素数
def Prinumber(num):
A = []
for i in range(1,num+1):
if num%i == 0:
A.append(i)
if len(A)==2:
return 2
else:
return 1
#1000以内的素数集合
s = []
for i in range(1001):
if Prinumber(i)==2:
s.append(i)
print(s)
#获取以公差为键,以数列为值的字典All_numlist
All_numlist = {}
for i in s:
a = [i]
# print(a)
for j in range(1,s.index(max(s))):
a = [i]
a.append(s[j])
# print(a)
Diff_value = a[1] - a[0]
# print(Diff_value)
if Diff_value <=100:
for k in range(2,11):
if max(a)+Diff_value < max(s):
a.append(max(a)+Diff_value)
if len(a)==10:
All_numlist.setdefault(Diff_value,[])
All_numlist[Diff_value].append(a)
Key = 999
for key in All_numlist.keys():
if key < Key:
Key = key
print('最小公差为:',Key)