소스코드
import sys
dp = [1] * (1000000 + 1)
dp[0] = 0
dp[1] = 0
for i in range(2, 1001): #dp에 소수를 넣는 과정 (에라토스테네스의 체)
if dp[i]:
for j in range(i * i, 1000001, i):
dp[j] = 0
def goldba(n):
for i in range(2, n):
if dp[i] and dp[n - i]:
print(f'{n} = {i} + {n - i}')
return 0
return 1 # 골드바흐 가설이 틀린걸 증명 해버림
while (1):
try:
n = int(sys.stdin.readline())
if n == 0:
break
if goldba(n):
print("Goldbach's conjecture is wrong.")
except EOFError:
break
알고리즘
에라토스테네스의 체를 사용하여 dp에 소수를 0과 1로 구분하여 입력해주고
n을 넣었을때 소수끼리 더한 수(dp가 둘다 참)이면 출력 후 함수 종료를 하면 된다.
시간초과가 여러번 났던 문제라서 다른 풀이를 보고 소수를 넣는 방법에 대해 시간을 줄일 수 있었다.
if n == 0:
break
이걸 안해줘서 골드바흐 가설이 틀린걸 증명할뻔했따...
'Coding test' 카테고리의 다른 글
[백준/1107/파이썬] 리모컨 - Brute force (0) | 2023.01.24 |
---|---|
[백준/1463/파이썬] 1로 만들기 - DP (0) | 2023.01.23 |
[백준/16936/파이썬] 나3곱2 (0) | 2023.01.21 |
[백준/14225/파이썬] 부분수열의 합 (2) | 2023.01.20 |
[백준/2468/파이썬] 안전영역 - DFS(재귀) (0) | 2023.01.19 |