본문 바로가기

알고리즘 삽질장

[BOJ] 17103번 - 골드바흐 파티션

반응형


문제설명

https://www.acmicpc.net/problem/17103

 

17103번: 골드바흐 파티션

첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2 < N ≤ 1,000,000을 만족한다.

www.acmicpc.net

사고과정

  • 골드바흐의 추측 문제와 비슷하게 풀이하면 된다. 단, a, b 쌍의 개수를 구하여야 하는데, 순서가 다른 a, b도 같은 것으로 여기므로 일종의 조합을 구해야 하는 문제이다.
  • 어차피 순서가 다른 것도 같은 것으로 취급하기 때문에 n = a + b 경우를 돌 때,  a가 n // 2 일 때까지만 돌면 된다!
  • 참고로 처음에 array[2] = False로 해서 에라토스테네스 체에서 2의 배수가 안걸러지는 실수를 했다. 이를 모르고 백준 사이트에 질문했었다..

풀이

import sys
import math
input = sys.stdin.readline

array = [True] * (int(1e6) + 1)
array[0] = array[1] = False
for i in range(2, int(math.sqrt(1e6)) + 1):
    if array[i]:
        j = 2
        while i * j <= int(1e6):
            array[i*j] = False
            j += 1
for tc in range(int(input())):
    n = int(input())
    count = 0
    for i in range(1, n//2 + 1):
        a, b = i, n-i
        if array[a] == True and array[b] == True:
            count += 1

    print(count)
반응형

'알고리즘 삽질장' 카테고리의 다른 글

[BOJ] 9095번 - 1, 2, 3 더하기  (0) 2021.10.27
[BOJ] 11726번 - 2Xn 타일링  (0) 2021.10.27
[BOJ] 1373번 - 2진수 8진수  (0) 2021.10.27
[BOJ] 17087번 - 숨바꼭질 6  (0) 2021.10.27
[BOJ] 9613번 - GCD 합  (0) 2021.10.27