PS
[๋ฐฑ์ค] 17103 ๊ณจ๋๋ฐํ ํํฐ์ with Python
ํ์ค_It's
2022. 7. 6. 16:55
728x90
๋ฐ์ํ
๐ BOJ 17103 ๊ณจ๋๋ฐํ ํํฐ์
๐ก ์กฐ๊ฑด
- ๊ณจ๋๋ฐํ์ ์ถ์ธก: 2๋ณด๋ค ํฐ ์ง์๋ ๋ ์์์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค.
- ์ง์ N์ ๋ ์์์ ํฉ์ผ๋ก ๋ํ๋ด๋ ํํ์ ๊ณจ๋๋ฐํ ํํฐ์
์ด๋ผ๊ณ ํ๋ค.
์ง์ N์ด ์ฃผ์ด์ก์ ๋, ๊ณจ๋๋ฐํ ํํฐ์ ์ ๊ฐ์๋ฅผ ๊ตฌํด๋ณด์. ๋ ์์์ ์์๋ง ๋ค๋ฅธ ๊ฒ์ ๊ฐ์ ํํฐ์ ์ด๋ค.
- ์ฒซ์งธ ์ค์ ํ
์คํธ ์ผ์ด์ค์ ๊ฐ์ T (1 โค T โค 100)๊ฐ ์ฃผ์ด์ง๋ค.
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์ ์ N์ ์ง์์ด๊ณ , 2 < N โค 1,000,000์ ๋ง์กฑํ๋ค.
- ์ ์๋ก , ์์ํ๋ณ, ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
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
โจ๏ธ ๋ฌธ์ ํ์ด
- ์์ํ๋ณ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ๋ฐํํ๋ ํจ์๋ฅผ ํตํด์ ์์ ๋ฆฌ์คํธ๋ฅผ ์ป๋๋ค.
- ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค ์ ๋ ฅ๋ฐ์ ์ซ์ num // 2 + 1์ ํด๋นํ๋ ์ซ์๊น์ง ์ํํ๋ฉด์ ๊ณจ๋๋ฐํ ํํฐ์ ์ ์๋ฅผ ์ธ์ด ์ถ๋ ฅํ๋ค
๋ฐ์ํ