python/백준 - 17103번 문제에 대한 분석임.
isprime = [True] * 1000001
isprime[0:2] = [False, False]
for i in range(2, 1000001):
if isprime[i]:
for j in range(i * 2, len(isprime), i):
isprime[j] = False
t = int(input())
for _ in range(t):
n = int(input())
count = 0
for i in range(2, n // 2 + 1):
if isprime[i] and isprime[n - i]:
count += 1
print(count)
isprime = [True] * 1000001
isprime[0:2] = [False, False]
True: 소수False: 소수가 아닌 정수False처리 해준다.for i in range(2, 1000001):
if isprime[i]:
for j in range(i * 2, len(isprime), i):
isprime[j] = False
isprime[i]일 경우(소수일 경우) i보다 크며 i의 배수인 경우는 소수가 아니므로 전부 False처리 해준다. (에라토스테네스의 체)t = int(input())
for _ in range(t):
n = int(input())
count = 0
for i in range(2, n // 2 + 1):
if isprime[i] and isprime[n - i]:
count += 1
print(count)
if isprime[i] and isprime[n - i]: 이 부분이 핵심인데isprime의 원소는 전부 bool 타입이지만 isprime의 index를 우리가 찾으려는 골드바흐 파티션인지를 확인하는 용도로 사용한다.isprime[i]와 isprime[n - i] 둘 다 참이라면 둘 다 소수란 의미이고 둘 다 소수란 의미는 두 소수의 합으로 나타낼 수 있다는 의미이므로 골드바흐 파티션임을 의미한다.