https://www.acmicpc.net/problem/6588
문제
소스코드
import sys
number = [True] * 1000001
for i in range(2, int(len(number) ** 0.5) + 1):
if number[i]:
for j in range(2 * i, 1000001, i):
number[j] = False
while 1:
n = int(sys.stdin.readline())
if n == 0:
break
for i in range(n - 3, 2, -2):
if (number[i] == True) and (number[n - i] == True):
print(f"{n} = {n-i} + {i}")
break
else:
print('"Goldbach\'s conjecture is wrong."')
풀이
- 소수는 테스트케이스에 관계없이 같기 때문에 테스트케이스를 입력하기 전에 소수인지 판정하는 리스트를 생성
- 두 홀수 소수의 합을 구하는 것이기 때문에 범위는 소수 2를 제외한 3부터 n-3까지이고 홀수만을 확인하면 되기 때문에 range(n-3, 2, -2) or range(3, n-2, 2)를 사용한다.