사용자 입력 후 숫자를 정리하는 코드를 작성했습니다. 순서는 인접한 숫자의 합이 소수 여야합니다. 입력 코드로 10까지 정상적으로 작동합니다. 그 이상으로 넘어 가면 시스템이 중단됩니다. 최적화 단계를 알려주십시오.
예 입력 8
답은 다음과 같아야합니다 : (1, 2, 3, 4, 7, 6, 5, 8)
코드는 다음과 같습니다 ....
import itertools
x = raw_input("please enter a number")
range_x = range(int(x)+1)
del range_x[0]
result = list(itertools.permutations(range_x))
def prime(x):
for i in xrange(1,x,2):
if i == 1:
i = i+1
if x%i==0 and i < x :
return False
else:
return True
def is_prime(a):
for i in xrange(len(a)):
print a
if i < len(a)-1:
if prime(a[i]+a[i+1]):
pass
else:
return False
else:
return True
for i in xrange(len(result)):
if i < len(result)-1:
if is_prime(result[i]):
print 'result is:'
print result[i]
break
else:
print 'result is'
print result[i-1]
구조에 동적 프로그래밍 :
def is_prime(n):
return all(n % i != 0 for i in range(2, n))
def order(numbers, current=[]):
if not numbers:
return current
for i, n in enumerate(numbers):
if current and not is_prime(n + current[-1]):
continue
result = order(numbers[:i] + numbers[i + 1:], current + [n])
if result:
return result
return False
result = order(range(500))
for i in range(len(result) - 1):
assert is_prime(result[i] + result[i + 1])
최대 재귀 깊이를 늘려 더 큰 목록에서 작동하도록 강제 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다