1. 程式人生 > >Python “最短”挑戰(12.29)

Python “最短”挑戰(12.29)

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]))