素数环 #
- 素数环问题的介绍
- 素数环问题的算法分析
- 素数环问题代码实现
素数环问题的介绍 #
素数环指的是将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环。我们以n=20,为例把1~20摆成一个环,想一想该如何排列呢?
素数环问题的算法分析 #
素数环问题的代码实现 #
因为是素数环,为了便于选择我们第一步,将第一个数字选定为1:
res=[0]+[1]+[0]*19 #第一步的结果是1存放在res[1],依次类推,res[0]存放当前找到多少个素数环
status=[False]*2+[True]*19 #status[i],表示数字i当前的状态,True是能够被选择,False代表不能被选择
def dfs(step):
if step>20 and prime(res[20],res[1]): #第20个数选择完毕,还需要判断是否和第一个数的和是否是素数
res[0]+=1
print(res)
return
for i in range(2,21):#从第二步开始,每一步从2~20中进行选择
if(prime(res[step-1],i) and status[i]): #当前选择与上一步选择之和要为素数,而且当前该数的状态可以选择
res[step]=i #保存当前结果
status[i]=False
dfs(step+1)
status[i]=True
def prime(x,y):#定义prime(x,y)函数,该函数的功能是判断两个整数的和是否是素数
s=x+y
for i in range(2,int((s)**0.5)+1):
if(s%i==0):
return False
else:
return True
dfs(2)#第一步已经选定,从第二步开始
事实上上述程序使用python执行完毕需要一定的时间,因为考虑顺逆时针1~20的素数环,一共6309300种,可以试一试上述程序执行所需的时间?
小结 #
习题 #
- 求解1~10的素数环问题
- 求解1~n的素数环个数,其中n=4~10,找一找素数环个数与n的关系