관리 메뉴

커리까지

[백준] 11502번 세 개의 소수 문제 파이썬 본문

알고리즘/풀이

[백준] 11502번 세 개의 소수 문제 파이썬

목표는 커리 2021. 6. 17. 22:28
728x90
SMALL

문제

정수론(수학)에서, 세 개의 소수 문제(3-primes problem) 는 다음과 같은 추측을 말한다.

'5보다 큰 임의의 홀수는 정확히 세 개의 소수들의 합으로 나타낼 수 있다. 물론 하나의 소수를 여러 번 더할 수도 있다.'

예를 들면,

  • 7 = 2 + 2 + 3
  • 11 = 2 + 2 + 7
  • 25 = 7 + 7 + 11

5보다 큰 임의의 홀수를 입력받아서, 그 홀수가 어떻게 세 소수의 합으로 표현될 수 있는지 (또는 불가능한지) 알아보는 프로그램을 작성하시오.

입력

첫째 줄에 T(Test Case의 수를 의미함)가 주어진다.

입력은 T개의 Test Case로 이루어진다.

각 Test Case는 하나의 정수 K (7 ≤ K < 1,000, K는 홀수)로 구성된다.

출력

T줄에 걸쳐서, 각 줄에 K가 어떻게 세 소수의 합으로 표현되는지 출력해야 한다.

가능하다면 그 세 소수를 오름차순 정렬하여 출력하면 된다.

여러 개의 답이 가능하다면 그 중 하나만 출력하면 되고, 만약 불가능하다면 0을 출력한다.

예제 입력 1

3
7
11
25

예제 출력 1

2 2 3
2 2 7
5 7 13

참고 답안

import sys

input = sys.stdin.readline
flush = sys.stdout.flush

prime = [True] * 1001
for i in range(2, 40):
    if not prime[i]:
        continue
    for j in range(2 * i, 1001, i):
        prime[j] = False

for _ in range(int(input())):
    k = int(input())
    k -= 3
    for i in range(2, 1001):
        if prime[i] and prime[k - i]:
            ans = [3, i, k - i]
            break
    print(*sorted(ans))
728x90
LIST
Comments