(백준) 소수 1017 – PYTHON
https://www.acmicpc.net/problem/1017
1017호: 소수 쌍
지민이 숫자 목록을 가지고 있다면, 각 쌍의 합이 소수가 되도록 짝을 짓고 싶어합니다. 예를 들어 {1, 4, 7, 10, 11, 12}가 있다고 가정합니다. 지민은 1+4=5, 7+10=17, 11+와 짝을 이룰 수 있습니다.
www.acmicpc.net

import sys
import math
def dfs(x):
global Y
global matched
global visited
if visited(Y.index(x)): return False
visited(Y.index(x)) = True
for y in Y:
if x + y in primes:
if y not in matched or dfs(matched(y)):
matched(y) = x
return True
return False
N = int(sys.stdin.readline())
X = list(map(int, sys.stdin.readline().split()))
# X.sort()
# 소수 목록을 미리 준비
primes = ()
for i in range(2, 2000):
is_prime = True
for j in range(2, i):
if i % j == 0:
is_prime = False
break
if is_prime: primes.append(i)
else: continue
answers = ()
for i in X:
matched = {}
if i == X(0): continue
if X(0) + i in primes:
if N == 2:
answers.append(i)
break
# print(i)
# 첫번째 숫자와 현재 매치된 숫자를 제외한 새 리스트 생성
Y = (x for x in X)
del Y(0)
del Y(Y.index(i))
matched = {}
for y in Y:
visited = (False for _ in range(len(Y)))
dfs(y)
# if matched: print(matched)
if N != 2 and len(matched) == N - 2: answers.append(i)
if not answers:
answers.append(-1)
answers.sort()
print(' '.join(list(map(str, answers))))
# 출처 : https://nerogarret.34