풀이
import sys; import math
# 소수인지 판별하는 함수
def is_prime(x):
for i in range(2, int(math.sqrt(x) + 1)):
if x % i == 0:
return False
return True
for tc in range(int(sys.stdin.readline())):
N = int(sys.stdin.readline())
# 효율적으로 답을 찾기위해 반으로 나누어 left와 right로 나누어 판별
left = N//2
right = N - left
rst = [0, 0]
while left > 0:
if is_prime(left) and is_prime(right):
print(left, right)
break
left -= 1
right += 1
해설
- 소수를 판별할 수 있다면 쉽게 풀 수 있다.
- 예전에 소수를 판별하는 문제를 풀어봐서 소수 판별 함수를 다시 보긴했다..
- left, right를 나누어서 투 포인터 방식으로 답을 찾아간다.
'백준' 카테고리의 다른 글
백준 18870 좌표 압축 (파이썬, 자바) (0) | 2022.11.01 |
---|---|
백준 1874 스택 수열 (파이썬) (0) | 2022.10.28 |
백준 1149 RGB거리 (파이썬) (0) | 2022.10.23 |
백준 2304 창고 다각형 (파이썬) (0) | 2022.10.20 |
백준 2644 촌수계산 (파이썬) (1) | 2022.10.18 |