[ ๋ฌธ์ ๋งํฌ ]
https://www.acmicpc.net/problem/1929
๐ฉ ์กฐ๊ฑด
- ์ ๋ ฅ์ผ๋ก M๊ณผ N์ด ๋ค์ด์ด
- M์ด์ N์ดํ์ ์์๋ฅผ ๋ชจ๋ ์ถ๋ ฅํด๋ผ
๐ฉ ์ ๊ทผ, ์ํ์ฐฉ์ค
์ผ๋จ 2๊ฐ ์๋ ์ง์์ด๋ฉด ๋ฐฐ์ ํ๊ณ .. ํ์๋ 3๋ถํฐ ๋๋ ๊ฐ๋ฉด์ ์์์ธ์ง ์ง์ ํ์ธ?
์ด๋ฐ ๋จ์ํ ์๊ฐ์ ํ๋๋ฐ ๋น์ฐํ ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ ๊ฐ์๋ค..
๊ทธ๋์ ๊ฒฐ๊ตญ ํ์ด๋ฅผ ์ฐพ์๋ดค๋๋ฐ, ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ์๊ณ ๋ฆฌ์ฆ์ ํตํด ์์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์๋ค.
์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ ์ด๋ค ์ ์ ์ดํ์ ์์๋ฅผ ์ฐพ๊ธฐ ์ํด์, ์์๋ฅผ ์ฐพ๋ ๊ฒ์ด ์๋๋ผ ํฉ์ฑ์๋ฅผ ์ ๊ฑฐํ๋ ์ ๊ทผ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
1. ์ ์ n์ด ์ฃผ์ด์ง๋ฉด, 2๋ถํฐ n๊น์ง์ ๋ชจ๋ ์๊ฐ ์์๊ฐ ๋ ์ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
# ์ ๋ต ์ถ๋ ฅ ์ ์ข ๋ ํธํ๊ฒ ํ๊ธฐ ์ํด, 0๊ณผ 1์ ๋ํด์ False๋ก ์ค์ ํจ
is_prime = [False,False] + [True]*(N-1)
2. 2๋ฅผ ์์๋ก ์ฑํํ๊ณ (=is_prime[2]๋ฅผ True๋ก ๋ ), ๋๋จธ์ง 2์ ๋ฐฐ์๋ฅผ ๋ชจ๋ ์ง์ด๋ค(=is_prime[2์ ๋ฐฐ์]๋ฅผ False๋ก ๋ ).
3. ์ง์์ง์ง ์์ ์(=is_prime[num]์ด True) ์ค ๊ฐ์ฅ ์์ 3์ ์์๋ก ์ฑํํ๊ณ , ๋๋จธ์ง 3์ ๋ฐฐ์๋ฅผ ๋ชจ๋ ์ง์ด๋ค.
4. ์ง์์ง์ง ์์ ์ ์ค ๊ฐ์ฅ ์์ 5๋ฅผ ์์๋ก ์ฑํํ๊ณ , ๋๋จธ์ง 5์ ๋ฐฐ์๋ฅผ ๋ชจ๋ ์ง์ด๋ค.
5. ์ ๊ณผ์ ์ n์ ์ ๊ณฑ๊ทผ์ ๋ด๋ฆผํ ์๋ฅผ ๋ง๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
for num in range(2, int(N**0.5)+1) :
- ์๋ฅผ ๋ค์ด 18์ ๊ฒฝ์ฐ, 1๊ณผ ์์ ์ ์ ์ธํ ์ฝ์๋ {2, 3, 6, 9}์ด๊ณ ์ ๊ณฑ๊ทผ์ 4.2์ธ๋ฐ, 4.2๋ณด๋ค ํฐ 6๊ณผ 9 ๊ฐ๊ฐ์ ์ง์ด ๋๋ ์ฝ์ 3๊ณผ 2๋ 4.2๋ณด๋ค ์์ผ๋ฏ๋ก ์ ๊ณฑ๊ทผ๋ณด๋ค ํฐ ์์ ๋ํด์๋ ์ฒด๋ฅผ ํธ์ด๋ผ ํ์๊ฐ ์๋ค.
- ๊ทผ๋ฐ ๋ค๋ฅธ ์ฝ๋๋ค์ ์ดํด๋ณด๋ ๊ตณ์ด ์ ๊ณฑ๊ทผ์ ๊ณ ๋ คํด์ ๋ฐ๋ณตํ์ง ์๊ณ ๋จ์ํ๊ฒ n๊น์ง ๋ฐ๋ณตํด๋ ๋๊ธด ํ๋ ๋ฏ?
๐ป ์ฝ๋ (Python)
# ์๋ผํ ์คํ
๋ค์ค์ ์ฒด
M,N = map(int, input().split())
is_prime = [False, False] + [True]*(N-1)
for num in range(2, int(N**0.5)+1) :
if is_prime[num]:
for composite in range(2*num, N+1, num):
is_prime[composite]=False
for i in range(M, N+1):
if is_prime[i]:
print(i)
'๐ป Algorithms > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11286 ์ ๋๊ฐ ํ - ์ฐ์ ์์ ํ, ํ (2) | 2024.10.04 |
---|---|
[๋ฐฑ์ค] 1676 ํฉํ ๋ฆฌ์ผ 0์ ๊ฐ์ - ์ํ, ์ ์๋ก (1) | 2024.09.16 |
[๋ฐฑ์ค] 12865 ํ๋ฒํ ๋ฐฐ๋ญ - ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (0) | 2024.09.01 |
[๋ฐฑ์ค] 10844 ์ฌ์ด ๊ณ๋จ ์ - ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (0) | 2024.09.01 |
[๋ฐฑ์ค] 11727 2xn ํ์ผ๋ง2 - ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (0) | 2024.08.31 |