[ 2023-03-16 ๐ŸŒบ TIL ]

Burkeyยท2023๋…„ 3์›” 16์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
60/157

๋ฐฑ์ค€ 17103๋ฒˆ

์ฝœ๋“œ๋ฐ”ํ์˜ ํŒŒํ‹ฐ์…˜์˜ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

์ง์ˆ˜ ๊ฐ’ a๊ฐ€ ๋“ค์–ด์˜ค๋ฉด b + c = a๊ฐ€ ๋˜๋Š” ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์žฌ (์—ฌ๊ธฐ์„œ b์™€ c๋Š” ๋‘˜ ๋‹ค ์†Œ์ˆ˜์—ฌ์•ผ ํ•œ๋‹ค.)

b์™€ c์˜ ๊ฐ’์ด ์ˆœ์„œ๋งŒ ๋‹ค๋ฅธ ๊ฐ’์€ ์ณ์ฃผ์ง€ ์•Š๋Š”๋‹ค ex) 3+7 = 10, 7+3 = 10 ์ด๋Ÿด ๊ฒฝ์šฐ ํ•œ๊ฐœ๋กœ ์นด์šดํŠธ๋œ๋‹ค.

์ฒ˜์Œ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜์˜€๋Š”๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ..๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.
์ฝ”๋“œ๋Š” ๋Š๋ฆฌ์ง€๋งŒ ๋งž๋Š” ๋‹ต์€ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

import sys

input = sys.stdin.readline

t = int(input())


def sosu(n):
    sqrt = int(n ** (0.5)) + 1
    count = 0
    for i in range(2, sqrt):
        if n % i == 0:
            return False
    return True


for _ in range(t):
    n = int(input())
    if n == 2:
        print(0)
        continue
    half = n//2
    count = 0
    for i in range(2, half+1):
        if sosu(i) and sosu(n-i):
            count += 1
    print(count)

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๊ตฌ๊ธ€๋ง์„ ํ•˜์˜€๊ณ  ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด
์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ๊ทธ์— ๋ฐฐ์ˆ˜ ๋˜๋Š” ์ˆ˜๋“ค์„ ์ œ๊ฑฐํ•˜์—ฌ ๋‚˜๋จธ์ง€ ์ˆ˜๋“ค์—์„œ ์†Œ์ˆ˜๋“ค์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

import sys

input = sys.stdin.readline

t = int(input())
t_li = []
max_t = -1

for _ in range(t):
    n = int(input())
    t_li.append(n)
    if max_t < n:
        max_t = n  # ์ž…๋ ฅ๊ฐ’์ค‘์— ๊ฐ€์žฅ ํฐ ์ˆ˜

sosu_li = [True] * (max_t + 1)  # 0 ~ ์ตœ๋Œ“๊ฐ’๊นŒ์ง€์˜ ์ˆ˜์™€ ์ธ๋ฑ์Šค ๊ฐ™์€ ๋ฐฐ์—ด ์„ ์–ธ
sosu_li[1] = False  # 1์ผ ๊ฑ์šฐ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์•ฝ์ˆ˜์ด๋‹ˆ False ๋„ฃ์Œ


def sosu(n):
    global sosu_li
    sqrt = int(n ** (0.5)) + 1
    count = 0
    for i in range(2, sqrt):  # i๊ฐ€ i์˜ ๋ฐฐ์ˆ˜์ธ ๊ฒƒ์„ ์ฐพ์•„ False๋กœ ๋ณ€๊ฒฝ
        if sosu_li[i]:
            for j in range(i+i, max_t+1, i):
                sosu_li[j] = False
            # ์†Œ์ˆ˜์•ˆ ๊ฐ’์€ True์ธ ๊ฒƒ์œผ๋กœ ๋‚จ๋Š”๋‹ค.
sosu(max_t)

for n in t_li:
    count = 0
    for i in range(2, (n//2) + 1): # ์ˆœ์„œ๋งŒ ๋‹ค๋ฅธ ๊ฐ’๋“ค์€ ๋ชฐ๋ผ๋„ ๋˜๊ธฐ์— ๋ฐ˜๊นŒ์ง€๋งŒ ๊ตฌํ•˜๋ฉด๋œ๋‹ค.
        if sosu_li[i] and sosu_li[n-i]: 
            count += 1
    print(count)
profile
์Šคํƒฏ ์˜ฌ๋ฆฌ๋Š” ์ค‘

0๊ฐœ์˜ ๋Œ“๊ธ€