🐍 파이썬 μƒμ΄ˆμ§œ

[BOJ][Python] λ°±μ€€ 9020번: κ³¨λ“œλ°”νμ˜ μΆ”μΈ‘

선달 2024. 10. 22. 01:09
λ°˜μ‘ν˜•

문제

1보닀 큰 μžμ—°μˆ˜ μ€‘μ—μ„œ  1κ³Ό 자기 μžμ‹ μ„ μ œμ™Έν•œ μ•½μˆ˜κ°€ μ—†λŠ” μžμ—°μˆ˜λ₯Ό μ†Œμˆ˜λΌκ³  ν•œλ‹€. 예λ₯Ό λ“€μ–΄, 5λŠ” 1κ³Ό 5λ₯Ό μ œμ™Έν•œ μ•½μˆ˜κ°€ μ—†κΈ° λ•Œλ¬Έμ— μ†Œμˆ˜μ΄λ‹€. ν•˜μ§€λ§Œ, 6은 6 = 2 × 3 이기 λ•Œλ¬Έμ— μ†Œμˆ˜κ°€ μ•„λ‹ˆλ‹€.
κ³¨λ“œλ°”νμ˜ 좔츑은 유λͺ…ν•œ μ •μˆ˜λ‘ μ˜ λ―Έν•΄κ²° 문제둜, 2보닀 큰 λͺ¨λ“  μ§μˆ˜λŠ” 두 μ†Œμˆ˜μ˜ ν•©μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€λŠ” 것이닀. μ΄λŸ¬ν•œ 수λ₯Ό κ³¨λ“œλ°”ν 수라고 ν•œλ‹€. 또, 짝수λ₯Ό 두 μ†Œμˆ˜μ˜ ν•©μœΌλ‘œ λ‚˜νƒ€λ‚΄λŠ” ν‘œν˜„μ„ κ·Έ 수의 κ³¨λ“œλ°”ν νŒŒν‹°μ…˜μ΄λΌκ³  ν•œλ‹€. 예λ₯Ό λ“€λ©΄, 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, 10 = 5 + 5, 12 = 5 + 7, 14 = 3 + 11, 14 = 7 + 7이닀. 10000보닀 μž‘κ±°λ‚˜ 같은 λͺ¨λ“  짝수 n에 λŒ€ν•œ κ³¨λ“œλ°”ν νŒŒν‹°μ…˜μ€ μ‘΄μž¬ν•œλ‹€.
2보닀 큰 짝수 n이 μ£Όμ–΄μ‘Œμ„ λ•Œ, n의 κ³¨λ“œλ°”ν νŒŒν‹°μ…˜μ„ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. λ§Œμ•½ κ°€λŠ₯ν•œ n의 κ³¨λ“œλ°”ν νŒŒν‹°μ…˜μ΄ μ—¬λŸ¬ 가지인 κ²½μš°μ—λŠ” 두 μ†Œμˆ˜μ˜ 차이가 κ°€μž₯ μž‘μ€ 것을 좜λ ₯ν•œλ‹€.

μž…λ ₯

첫째 쀄에 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ 개수 Tκ°€ 주어진닀. 각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” ν•œ μ€„λ‘œ 이루어져 있고 짝수 n이 주어진닀.

좜λ ₯

각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ— λŒ€ν•΄μ„œ 주어진 n의 κ³¨λ“œλ°”ν νŒŒν‹°μ…˜μ„ 좜λ ₯ν•œλ‹€. 좜λ ₯ν•˜λŠ” μ†Œμˆ˜λŠ” μž‘μ€ 것뢀터 λ¨Όμ € 좜λ ₯ν•˜λ©°, 곡백으둜 κ΅¬λΆ„ν•œλ‹€.

 

풀이

INF = 10000

# μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체
prime = [1 for i in range(INF+1)]
prime[0] = prime[1] = 0
for i in range(2, INF+1):
    if not prime[i]:
        continue
    for j in range(i*i, INF+1, i):
        prime[j] = 0

# ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€
t = int(input())
for _ in range(t):
    n = int(input())
    
    a = 0
    for i in range(n//2 + 1):
        if prime[i] and prime[n-i]:
            a = i
    print(f"{a} {n-a}")
λ°˜μ‘ν˜•