본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬] 9020번 골드바흐의 추측

by 현장 2022. 5. 7.

-Code

MAX = 10001
sieve = [False, False] + [True] * MAX

for i in range(2, int(MAX ** 0.5) + 1):
    if sieve[i]:
        for j in range(i * 2, MAX, i):
            sieve[j] = False
for _ in range(int(input())):
    n = int(input())
    gap = 10000
    for i in range(2, n):
        if sieve[n - i] and sieve[i] and 0 <= n - i - i < gap:
            n1, n2 = i, n - i
    print(n1, n2)

처음에 각 수마다 에라토스테네스의 체를 계산했더니 시간 초과가 나서 10000까지 소수를 생성하고 리스트에 담아서 만들었지만 또 시간 초과가 생겼습니다. 그래서 전 문제와 같이 sieve에서 바로 판벌되도록 해서 해결을 했습니다.