반응형
https://www.acmicpc.net/problem/6588
6588번: 골드바흐의 추측
각 테스트 케이스에 대해서, n = a + b 형태로 출력한다. 이때, a와 b는 홀수 소수이다. 숫자와 연산자는 공백 하나로 구분되어져 있다. 만약, n을 만들 수 있는 방법이 여러 가지라면, b-a가 가장 큰
www.acmicpc.net
💡IDEA
수학을 사용하는 문제이다.
문제는 크게 어렵지 않지만 시간초과의 늪에 빠지기 쉬운 문제이다.
소수를 구해두는 건 while문 안에 넣으면 시간이 오래 걸리므로 먼저 계산해두어야 한다.
구해둔 이 소수배열을 앞에서부터 확인하는데, 더해서 n이 되는 소수를 구해야 하므로 i번째가 소수인 것과 n-i번째가 소수인 것을 확인해주면 된다. 발견할 시엔 출력 양식에 맞추어서 출력해준다.
📌CODE
prime = [1] * (1000000 + 1)
prime[0] = 0
prime[1] = 0
m = int(1000000 ** 0.5)
for i in range(2, m + 1):
if prime[i]:
for j in range(2 * i, 1000000 + 1, i):
prime[j] = 0
while True:
n = int(input())
if n == 0:
break
for i in range(2, 1000000+1):
if prime[i] and prime[n-i]:
print("{} = {} + {}".format(n, i, n-i))
break
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ][python] 9020. 골드바흐의 추측 (0) | 2022.07.26 |
---|---|
[BOJ][python] 2805. 나무 자르기 (0) | 2022.07.26 |
[BOJ][python] 2293. 동전 1 (0) | 2022.07.21 |
[BOJ][python] 1759. 암호 만들기 (0) | 2022.07.21 |
[BOJ][python] 2583. 영역 구하기 (0) | 2022.07.21 |