archive

[백준] 골드바흐의 추측 (Python) 본문

STUDY/알고리즘

[백준] 골드바흐의 추측 (Python)

seonyounggg 2021. 3. 8. 20:42

✏️ 문제

 

9020번: 골드바흐의 추측

1보다 큰 자연수 중에서  1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아

www.acmicpc.net

✏️ 풀이

모든 짝수는 두 소수의 합으로 표현이 된다.

이 때 모든 짝수 n = n/2 + n/2로 표현이 가능하다.

따라서 이를 중심으로 왼쪽항은 1 빼주고 오른쪽 항은 1더해주면 모든 합의 경우의 수를 표현할 수 있다.

이 때 두 항이 소수인 것 중 가장 작은 것을 출력해준다.

이 풀이에서는 중앙에서 시작했으므로 소수인 첫번째 경우가 가장 차이가 적게 된다. 따라서 바로 break한다.

✏️ 코드

from math import sqrt

# 10000까지의 소수
sosu = []
for i in range(2, 10000):
    for j in range(2, int(sqrt(i)) + 1):
        if i % j == 0:
            break
    else:
        sosu.append(i)

T = int(input())
for _ in range(T):
    n = int(input()) # 두 소수의 합으로 나타내짐

    # 무조건 짝수 차이남
    diff = 0
    while True:
        a = int(n/2 - diff/2)
        b = int(n/2 + diff/2)
        if a in sosu and b in sosu:
            print(a, b)
            break
        else:
            diff += 2

'STUDY > 알고리즘' 카테고리의 다른 글

[백준] 수 정렬하기 3 (Python)  (0) 2021.03.08
[백준] 터렛 (Python)  (0) 2021.03.08
[백준] 영화감독 숌 (Python)  (0) 2021.03.06
[백준] 소수 구하기 (Python)  (0) 2021.03.04
[백준] A+B - 4 (Python)  (0) 2021.03.01
Comments