https://www.acmicpc.net/problem/9020

import sys
input = sys.stdin.readline

def isPrime(num):
    if num == 2: return 1
    else:
        for i in range(2, int(num**0.5)+1):
            if num % i == 0: return False
        return True

for _ in range(int(input())):
    num1 = int(input())//2; num2 = num1;
    while 1:
        if isPrime(num1) and isPrime(num2): print(num1, num2); break;
        else: num1 -= 1; num2 += 1;

soltion

소수의 합으로 한 수를 나타내야하므로, 숫자가 소수인 지를 검사해주는 함수 isPrime이 필요하다.

def isPrime(num): 
    if num == 2: return 1
    else:
        for i in range(2, int(num**0.5)+1): # 수행시간을 줄이기 위해 루트+1 로 범위 설정
            if num % i == 0: return False
        return True

여러 파티션이 존재할 때 두 소수의 차이가 가장 작은 것을 출력해야한다. 이때, 짝수를 2n이라고 가정한다면, n+n 이 가장 차이가 작은 수의 합이 된다. 따라서, 두 개의 변수 (num1, num2) 에 num//2를 저장한 후, num1은 1씩 감소, num2는 1씩 증가시키며 두 수가 모두 소수가 된다면 수를 출력한다.

for _ in range(int(input())):
    num1 = int(input())//2; num2 = num1;
    while 1:
        if isPrime(num1) and isPrime(num2): print(num1, num2); break;
        else: num1 -= 1; num2 += 1;