

MAX = 1000000
check = [0] * (MAX + 1)
check[0] = check[1] = True
prime = []
for i in range(2, MAX + 1):
if not check[i]:
prime.append(i)
j = i + i
while j <= MAX:
check[j] = True
j += i
prime = prime[1:]
while True:
n = int(input())
if n == 0:
break
for p in prime:
if (n - p) < 0:
print("Goldbach's conjecture is wrong.")
break
elif not check[n - p]:
print(f'{n} = {p} + {n - p}')
break
에라토스테네스의 체을 이용해 MAX인 1000000 까지의 소수의 배수들을 모두 걸러주고 PRIME 리스트를 만들어준다.
A + B = N ( A, B, C 는 모두 소수) 라는 골드바흐의 추측 공식을 기억해보자.
A가 P라고 할때 P + B = N 이고
B = N - P가 된다.
따라서 prime을 하나씩 꺼내주면서 n-p를 찾아주면 된다.
n - p가 음수일 경우 goldbach's conjecture is wrong을 출력해준다.
'백준 알고리즘 (Baekjoon Algorithm)' 카테고리의 다른 글
[파이썬] 백준 알고리즘 No.3085 사탕 게임 (0) | 2021.12.29 |
---|---|
[파이썬] 백준 알고리즘 No.2309 일곱 난쟁이 (0) | 2021.12.28 |
[파이썬] 백준 알고리즘 No.2193 이친수 (1) | 2021.12.27 |
[파이썬] 백준 알고리즘 No.11727 2Xn 타일링 2 (0) | 2021.12.26 |
[파이썬] 백준 알고리즘 No.4963 섬의 개수 (0) | 2021.12.24 |