http://acmicpc.net/problem/9020
{코드}
data = [int(input()) for _ in range(int(input()))]
n = max(data)
sieve = list(range(n+1))
sieve[0], sieve[1] = 0, 0
for i in range(2, n+1):
if sieve[i]:
for t in range(i+i, n+1, i):
if sieve[t]:
sieve[t] = 0
for n in data:
p, q = n//2, n//2
while True:
if sieve[p] and sieve[q]:
print(p, q)
break
else:
p -= 1
q += 1
{설명}
최대한 n을 이루는 수의 차가 작아야하므로 n의 절반에서 시작해서 n을 만드는 소수 두개를 에라토스테네스의 체에서 찾으면 된다.
*처음에 실행시간이 7000ms대가 나와서 수정을 거치니 최종적으로 284ms가 나왔다.
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 3009번-파이썬/Python] 네 번째 점 (0) | 2020.12.17 |
---|---|
[백준 1085번-파이썬/Python] 직사각형에서 탈출 (0) | 2020.12.17 |
[백준 4948번-파이썬/Python] 베르트랑 공준 (0) | 2020.12.17 |
[백준 1929번-파이썬/Python] 소수 구하기 (0) | 2020.12.17 |
[백준 2581번-파이썬/Python] 소수 (0) | 2020.12.17 |