Python “最短”挑戰(12.29)
阿新 • • 發佈:2018-12-30
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]))