Description
一个素环由n个数组成,自然数1,2,…,n分别放在这个环周围,任意两个相邻的数字之和都是素数。现在给你一个数n,请你找到长度为n的一个素环。
Input
一个数n(0<n<20)。
Output
如果素环存在,输出素环的一种排列情况,各个数字用空格隔开。如果有多种排列方式,尽量使小的数字在前面。如果不存在素环,则输出空行。
其余要求同首题。
Sample Input
6
Sample Output
1 4 3 2 5 6
Reference code
def is_prime(n):
for i in range(2,n):
if n%i==0:
return False
return True
def solve(ans,s=2):
if len(ans)==n and is_prime(ans[0]+ans[-1]):
return ans
for i in range(s,n+1):
if nums[i-1] and is_prime(ans[-1]+i):
ans.append(i)
nums[i-1]=0
return solve(ans)
r=ans[-1]
if r==1:
return []
else:
nums[r-1]=1
ans.pop()
return solve(ans,r+1)
while True:
n=int(input())
if n<=0 or n>=20:
break
nums=[0]+[1 for i in range(n-1)]
print(*solve([1]))