๋ฌธ์
M์ด์ N์ดํ์ ์์๋ฅผ ๋ชจ๋ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ M๊ณผ N์ด ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. (1 ≤ M ≤ N ≤ 1,000,000) M์ด์ N์ดํ์ ์์๊ฐ ํ๋ ์ด์ ์๋ ์ ๋ ฅ๋ง ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
ํ ์ค์ ํ๋์ฉ, ์ฆ๊ฐํ๋ ์์๋๋ก ์์๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
3 16
์์ ์ถ๋ ฅ 1
3
5
7
11
13
ํ์ด
(1) m๊ณผ n ์ฌ์ด ์ซ์๋ฅผ ๊ฐ๊ฐ ์์ ํ๋ณ
1. ์์๋ฉด True๋ฅผ, ์๋๋ฉด False๋ฅผ ๋ฐํํ๋ ํจ์ is_prime(a)
1-1. a๊ฐ 1์ด๋ฉด return False
1-2. a๋ฅผ 2~a-1์ ์๋ก ๋๋ด์ ๋ ๋๋จธ์ง๊ฐ 0์ด ๋๋ฉด return False
1-3. a๋ฅผ 2~a-1์ ์๋ก ๋ชจ๋ ๋๋ด๋๋ฐ ํ๋ฒ๋ ๋๋จธ์ง๊ฐ 0์ด ๋์ง ์์ผ๋ฉด return True
2. m๋ถํฐ n๊น์ง a๋ฅผ ์์ ํ๋ณ, is_prime์ด True๋ฅผ ๋ฐํํ ๋๋ง a ์ถ๋ ฅ
# 1929-1.py
m, n = map(int, input().split())
def is_prime(a):
if a == 1:
return False
for j in range(2, a):
if a % j == 0:
return False
return True
for i in range(m, n+1):
if is_prime(i):
print(i)
(2) n๊น์ง์ ์๋ฅผ ๋ฏธ๋ฆฌ ์์ ํ๋ณ ํ ํ์ธ
1. prime ๋ฆฌ์คํธ์์ False, False, True, … ๋ฅผ ์ ์ฅํ๋ค
-> prime์ ์ธ๋ฑ์ค ์ซ์๊ฐ ์์๋ฉด True, ๊ทธ๋ ์ง ์์ผ๋ฉด False๋ฅผ ์ ์ฅํ ๊ฒ์ด๋ค
2. ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ์ด์ฉํ๋ค.
2-1. i๋ 2๋ถํฐ n์ ์ ๊ณฑ๊ทผ๊น์ง์ ์์๋๋ก ๋ฐฐ์๋ฅผ ์ง์๋๊ฐ๊ฒ.
-> i์ ๋ฐฐ์๋ i๋ก ๋๋ ์ง๊ธฐ ๋๋ฌธ์ ์์๊ฐ ์๋๋ฏ๋ก prime[i]๋ฅผ False๋ก ๋ณ๊ฒฝ
2-2. prime[i] ๊ฐ True์ผ ๋๋ง ๋ฐฐ์๋ฅผ ์ง์ด๋ค -> False๋ ์ด๋ฏธ ๋ ์ด์ ์ ์ง์์ง ๊ฒ์ด๋ฏ๋ก ๋ฐฐ์ ๋ํ ์ด๋ฏธ False
2-3. i*i๋ถํฐ i์ฉ ๋ํ๋ฉด์ False๋ก ๋ณ๊ฒฝ. i์ 2๋ฐฐ, 3๋ฐฐ, …, n๋ฐฐ๋ ๋ ์ด์ ์ ์ด๋ฏธ ์ง์์ก์๊ฒ์ด๋ฏ๋ก i*i๋ถํฐ ์ง์๋๊ฐ๋ค
3. ์ ๋ ฅ๋ฐ์ m๋ถํฐ n๊น์ง prime[m] ~prime[n]์ ๊ฐ์ ํ์ธํ์ฌ True์ผ ๋๋ง ์ถ๋ ฅํ๋ค
# 1929-2.py
m, n = map(int, input().split())
prime = [False, False] + [True] * (n - 1)
for i in range(2, int(pow(n, 0.5)+1)):
if prime[i]:
for j in range(i*i, n+1, i):
prime[j] = False
for i in range(m, n+1):
if prime[i]:
print(i)
์๊ฐ (1)๋ฒ ์๋๊ฐ (2)๋ฒ
(1)๋ฒ์ ์๋๋ ๋๋ฆฌ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์ ๊ณ
(2)๋ฒ์ ์๋๋ ๋น ๋ฅด์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ํฌ๋ค
์ฐจ์ด๊ฐ ์์ฒญ๋จ... ์๊ทธ๋ฐ๊ฑธ๊น