[ํ์ด์ฌ/python] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด
์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ ๊ณ ๋ ๊ทธ๋ฆฌ์ค ์ํ์์ธ ์๋ผํ ์คํ ๋ค์ค๊ฐ ๊ณ ์ํด ๋ธ ์์๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ง์น ์ฒด๋ก ๊ฑธ๋ฌ๋ด๋ฏ์ด ์๋ฅผ ๊ฑธ๋ฌ๋ธ๋ค๊ณ ํ์ฌ ๋ถ์ฌ์ง ์ด๋ฆ์ด๋ค.
์์์ ์์ฐ์ n์ ๋ํด ์์๋ฅผ ์ฐพ๋ ๊ฐ์ฅ ๋น ๋ฅด๊ณ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด๋ค.
์์๋ฅผ ์ฐพ์๋ด๋ ์๋ฆฌ๋ 2๋ถํฐ ์์ํ์ฌ ๊ทธ์ ๋ฐฐ์๋ฅผ ์ง์๋๊ฐ๋ ๋ฐฉ๋ฒ์ผ๋ก
๋ค์์ผ๋ก ์ค๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๋ฅผ ๋์์ผ๋ก ๊ทธ ์์ ๋ฐฐ์๋ฅผ ๊ณ์ํด์ ์ง์๋๊ฐ๋ค.
๊ทธ ํ ๋จ์ ์ซ์๋ค์ด ์์๊ฐ ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด์ ์ด ๊ณผ์ ์ ๋ช ๋ฒ ๋ฐ๋ณตํ ์ง ์ ํด์ค์ผํ๋๋ฐ
๊ฐ์ฅ ํฐ ์๊ฐ ์ฌ ๋๊น์ง ๋ฐ๋ณตํด๋ ๊ฐ๋ฅ์ ํ๊ฒ ์ง๋ง ํจ์จ์ ์ด์ง ์๋ค.
์ต์๋ก ๋ฐ๋ณตํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณฑ๊ทผ์ ์ด์ฉํ๋ ๊ฒ์ด๋ค.
์ด ๋ฌธ์ ์์ ์ ๊ณฑ๊ทผ์ด ์ฐ์ด๋ ์ด์ ๋ฅผ ์์ธ์๋ถํด๋ฅผ ์ด์ฉํ์ฌ ์ค๋ช ํด๋ณด์๋ค.
์ด๋ค ์์ ์ ๊ณฑ๊ทผ์ด๋ ์ ๊ณฑํ์ฌ ๊ทธ ์๊ฐ ๋๋ ์๋ก, ์๋ฅผ ๋ค์ด 9์ ์ ๊ณฑ๊ทผ์ 3์ด๋ค.
์ด๋ค ์์ ์ฝ์๋ฅผ ๊ตฌํ๋ฉด ์ ๊ณฑ๊ทผ์ ์ ์ธํ ๋ชจ๋ ์๋ ์ง์ ์ด๋ฃจ์ด ๊ทธ ์ด๋ค ์๋ฅผ ๋ง๋ ๋ค.
์๋ฅผ ๋ค์ด 36์ ์ฝ์๋ 1, 2, 3, 4, 6, 9, 12, 18, 36์ด๊ณ 36์ ์ ๊ณฑ๊ทผ์ 6์ด๋ค.
์ ๊ณฑ๊ทผ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ์๋ ์ซ์๋ ์ค๋ฅธ์ชฝ์ ์๋ ์์ ์ง์ ์ด๋ฃจ๊ณ ์๋ค.
์ค๋ฅธ์ชฝ์ ์๋ ์๋ ์ผ์ชฝ์ ์๋ ์ง์ ๋ฐฐ์๋ก ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ์ด์ฉํ๋ฉด ๊ฑธ๋ฌ์ง ์ซ์๋ค์ด๋ค.
๋ฐ๋ผ์ ์๋ผํ ์คํ ๋ค์ค์ ์ ์ฉ๋ ๊ฐ์ฅ ํฐ ์๋ ์ ๊ณฑ๊ทผ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ซ์์ผ ๊ฒ์ด๋ค.
์ด์ ํ์ด์ฌ์ ์ด์ฉํ์ฌ ์์๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๊ตฌํํด ๋ณผ ๊ฒ์ด๋ค.
์์๊ตฌํ๊ธฐ ์์ ๋ ๋ฐฑ์ค ๋ฌธ์ ํ์ด์์ ํฌ์คํ ํด๋์๋ค.
2021.03.09 - [๐์๊ณ ๋ฆฌ์ฆ/๋ฐฑ์ค] - [๋ฐฑ์ค/python] 1929๋ฒ : ์์ ๊ตฌํ๊ธฐ
ํ์ด์ฌ์ผ๋ก ๊ตฌํํ๊ธฐ
for i in range(2, int(N**0.5)+1):
if number[i]:
for j in range(2*i, N+1, i):
number[j] = False
for index in range(M, N+1):
if number[index] and index!=1:
print(index)
M๋ถํฐ N๊น์ง์ ์ซ์ ์ค ์์๋ฅผ ๊ตฌํ ๊ฒ์ด๋ค. number์๋ N+1๊ฐ์ True๋ฅผ ์ ์ฅํด๋์๋ค.
์ธ๋ฑ์ค ์ซ์๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ N+1๊น์ง ํด์ค์ผ 0๋ถํฐ N๊น์ง์ ์ซ์๊ฐ ์๊ธด๋ค.
์ด์ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ์ด์ฉํ์ฌ ์์๊ฐ ์๋ ์ซ์๋ค์ False๋ก ๋ฐ๊พธ์ด์ค ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์
๐ฅ 1์ ์์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ง์ฐ๊ณ ์์ํด์ผํ๋ค๋ ์ ๊ณผ
๐ฅ ๋๋๋ ์๋ ์์์ด๊ธฐ ๋๋ฌธ์ ๊ทธ ์๋ ๋นผ๊ณ ์ง์์ผํ๋ค๋ ์ ์ด๋ค. (ex. 2์ ๋ฐฐ์๋ฅผ ์ง์ธ ๋ 2๋ ๋นผ๊ณ ์ง์์ผํ๋ค.)
2๋ถํฐ N์ ์ ๊ณฑ๊ทผ์ธ N**0.5๋ณด๋ค 1ํฐ ์ ๋งํผ ๋ฐ๋ณตํ๋ค.
False๋ก ๋ฐ๋ ์๋ ๋์ด์ ๋ณผ ํ์ ์์ผ๋ฏ๋ก True์ธ ์ซ์๋ง ๋ฐ๋ณตํ๊ธฐ ์ํด if๋ฌธ์ผ๋ก ๊ฑธ๋ฌ์ค๋ค.
for j in range(2*i, N+1, i):
number[j] = False
๋๋๋ ์๋ False๋ก ๋ฐ๊พธ๋ฉด ์๋๊ธฐ ๋๋ฌธ์ ๋ฒ์๋ฅผ 2*i๋ถํฐ๋ก ์ค์ ํ๊ณ
๋ฐฐ์๋ฅผ ์ฐพ๊ธฐ ์ํด step์ i๋ก ์ค์ ํด ๋ง์ ์ผ๋ก ๋ฐฐ์๋ฅผ ๊ตฌํํ์ฌ ํด๋น ์ซ์๋ฅผ False๋ก ๋ฐ๊ฟ์ค๋ค.
์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด number์๋ ์์์ธ ์ซ์๋ True๋ก, ์๋ ์ซ์๋ False๋ก ์ค์ ๋๋ค.
for index in range(M, N+1):
if number[index] and index!=1:
print(index)
์ด์ M๋ถํฐ N์ ๋ฒ์์ ์๋ True์ ์ธ๋ฑ์ค๋ฅผ ์ถ๋ ฅํด์ค๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ 1์ ์ ์ธํ๊ณ ์ถ๋ ฅํด์ฃผ์ด์ผ ํ๋ค๋ ์ ์ด๋ค.
'๐์๊ณ ๋ฆฌ์ฆ > ๐ ๊ฐ๋ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ์ด์ฌ/python] ํ (Queue) (0) | 2021.03.19 |
---|---|
[ํ์ด์ฌ/python] ์ ๋ ฌ - sort(), sorted() (0) | 2021.03.17 |
[ํ์ด์ฌ/python] ์ด์ง ํ์ (Binary Search) (0) | 2021.03.17 |
[ํ์ด์ฌ/python] ๋์ ๋๋ฆฌ (dictionary) (0) | 2021.03.12 |
[ํ์ด์ฌ/python] ๋๋คํจ์ (lambda) (0) | 2021.03.12 |