[기본수학 2] 골드바흐의 추측
2021. 3. 28. 14:01ㆍ백준
와우.... 왜 골드바흐의 '추측'인가 했더니 아직 증명되지 않은 정수론의 미해결 문제라고 한다.
흥미진진
난 비록 문제풀이를 위해 끄적거리는 수준이지만 미해결 문제라는 단어가 주는 설레임과 위대한 수학자들의 업적에 잠시 경외감을 느끼게 된다.
2보다 큰 자연수는 두 개의 소수로 이루어졌을 것이라고 '추측' 되는데, 이 때 그 두 소수를 출력하는 문제이다.
두 수의 합이 적은 것부터 출력하면 된다고 했으니 2로 나누어서 +1 -1을 하면서 소수인지 검증하면 되겠다.
import math
from sys import stdin
# 골드바흐의 추측
t = stdin.readline()
t_c = []
for i in range(0, int(t)):
t_c.append(int(stdin.readline()))
'''
2보다 큰 모든 짝수는 '두' 소수의 합으로 나타낼 수 있다.
두 소수의 차이가 적은 순서대로 구해라.
입력값의 범위 = 4 <= n <= 10,000
'''
def prime(num):
if num == 1:
return False
n = int(math.sqrt(num))
for k in range(2, n + 1):
if num % k == 0:
return False
return True
def getGoldBach(target:int):
right = math.ceil(target/2)
left = target - right
while True:
if prime(left) and prime(right):
break
else:
right = right + 1
left = left - 1
return print(str(left) + " " + str(right))
for c in t_c:
getGoldBach(c)