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

猜你喜欢

转载自blog.csdn.net/qq_43549984/article/details/85344915