[Baekjoon] 9020 골드바흐의 추측
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;