def is_prime(num):
    if(num <= 1):
        return False
    
    i = 2
    while i * i <=num:
        if(num % i == 0):
            return False
        i += 1
    return True

Case = int(input())
num_list = [int(input()) for x in range(Case)]
prime_list = []
for i in range(2, 10001):
    if(is_prime(i)):
        prime_list.append(i)

for num in num_list:
    half = num // 2
    d_half = half
    u_half = half
    while(d_half > 0):
        if(d_half in prime_list and u_half in prime_list):
            if(num == d_half + u_half):
                print(d_half, u_half)
                break
        d_half -= 1
        u_half += 1

밑의 코드는 시간초과.. 절반으로 제한하는 것보다 절반부터 시작하는게 당연히 빠를 것 같긴 하다

def is_prime(num):
    if(num <= 1):
        return False
    
    i = 2
    while i * i <=num:
        if(num % i == 0):
            return False
        i += 1
    return True

Case = int(input())
num_list = [int(input()) for x in range(Case)]
prime_list = []
for i in range(2, 10000):
    if(is_prime(i)):
        prime_list.append(i)

for num in num_list:
    diff = None
    prime_a, prime_b = 0, 0
    for i in prime_list:
        if(i > num // 2):
            break
        for j in prime_list:
            if(i + j == num or j > num):
                i_minus_j = abs(i - j)
                if(diff == None):
                    diff = i_minus_j
                    prime_a, prime_b = i, j
                elif(diff > i_minus_j):
                    diff = i_minus_j
                    prime_a, prime_b = i, j
                break
    print(prime_a, prime_b)

'# 코딩 문제 관련 > 파이썬' 카테고리의 다른 글

백준 1874번(python)  (0) 2019.06.02
백준 10828번(python)  (0) 2019.06.02
백준 4948번(python)  (0) 2019.05.31
백준 2581번(python)  (0) 2019.05.31
백준 1929번(python)  (0) 2019.05.31