PS

[λ°±μ€€] 17103 κ³¨λ“œλ°”ν νŒŒν‹°μ…˜ with Python

ν˜•μ€€_It's 2022. 7. 6. 16:55
728x90
λ°˜μ‘ν˜•

πŸ“Œ BOJ 17103 κ³¨λ“œλ°”ν νŒŒν‹°μ…˜

πŸ’‘ 쑰건

  1. κ³¨λ“œλ°”νμ˜ μΆ”μΈ‘: 2보닀 큰 μ§μˆ˜λŠ” 두 μ†Œμˆ˜μ˜ ν•©μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.
  1. 짝수 N을 두 μ†Œμˆ˜μ˜ ν•©μœΌλ‘œ λ‚˜νƒ€λ‚΄λŠ” ν‘œν˜„μ„ κ³¨λ“œλ°”ν νŒŒν‹°μ…˜μ΄λΌκ³  ν•œλ‹€.
    짝수 N이 μ£Όμ–΄μ‘Œμ„ λ•Œ, κ³¨λ“œλ°”ν νŒŒν‹°μ…˜μ˜ 개수λ₯Ό κ΅¬ν•΄λ³΄μž. 두 μ†Œμˆ˜μ˜ μˆœμ„œλ§Œ λ‹€λ₯Έ 것은 같은 νŒŒν‹°μ…˜μ΄λ‹€.
  1. 첫째 쀄에 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ 개수 T (1 ≀ T ≀ 100)κ°€ μ£Όμ–΄μ§„λ‹€.
    각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” ν•œ μ€„λ‘œ 이루어져 있고, μ •μˆ˜ N은 짝수이고, 2 < N ≀ 1,000,000을 λ§Œμ‘±ν•œλ‹€.
  1. μ •μˆ˜λ‘ , μ†Œμˆ˜νŒλ³„, μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 μœ ν˜•μ˜ 문제

πŸ–₯ μ†ŒμŠ€ μ½”λ“œ

from sys import stdin


def prime_list(n):
    sieve = [False, False] + [True] * n
    m = int(n ** 0.5)
    for i in range(2, m + 1):
        if sieve[i]:
            for j in range(i + i, n, i):
                sieve[j] = False

    return sieve


prime_nums = prime_list(10 ** 6)

for _ in range(int(stdin.readline())):
    cnt = 0
    num = int(stdin.readline())
    for i in range((num // 2) + 1):
        if prime_nums[i] and prime_nums[num - i]:
            cnt += 1

    print(cnt)

πŸ”– 예제 및 μ‹€ν–‰κ²°κ³Ό

예제

5
6
8
10
12
100

μ‹€ν–‰κ²°κ³Ό

1
1
2
1
6

⌨️ 문제 풀이

  1. μ†Œμˆ˜νŒλ³„ 리슀트λ₯Ό λ§Œλ“€μ–΄ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό ν†΅ν•΄μ„œ μ†Œμˆ˜ 리슀트λ₯Ό μ–»λŠ”λ‹€.
  1. 각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ§ˆλ‹€ μž…λ ₯받은 숫자 num // 2 + 1에 ν•΄λ‹Ήν•˜λŠ” μˆ«μžκΉŒμ§€ μˆœνšŒν•˜λ©΄μ„œ κ³¨λ“œλ°”ν νŒŒν‹°μ…˜μ˜ 수λ₯Ό μ„Έμ–΄ 좜λ ₯ν•œλ‹€
λ°˜μ‘ν˜•