[๋ฐฑ์ค/python] 4948๋ฒ : ๋ฒ ๋ฅดํธ๋ ๊ณต์ค
๋ฌธ์
๋ฒ ๋ฅดํธ๋ ๊ณต์ค์ ์์์ ์์ฐ์ n์ ๋ํ์ฌ, n๋ณด๋ค ํฌ๊ณ , 2n๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์๋ ์ ์ด๋ ํ๋ ์กด์ฌํ๋ค๋ ๋ด์ฉ์ ๋ด๊ณ ์๋ค.
์ด ๋ช ์ ๋ ์กฐ์ ํ ๋ฒ ๋ฅดํธ๋์ด 1845๋ ์ ์ถ์ธกํ๊ณ , ํํ๋ํฐ ์ฒด๋น์ผํ๊ฐ 1850๋ ์ ์ฆ๋ช ํ๋ค.
์๋ฅผ ๋ค์ด, 10๋ณด๋ค ํฌ๊ณ , 20๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์๋ 4๊ฐ๊ฐ ์๋ค. (11, 13, 17, 19) ๋, 14๋ณด๋ค ํฌ๊ณ , 28๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์๋ 3๊ฐ๊ฐ ์๋ค. (17,19, 23)
์์ฐ์ n์ด ์ฃผ์ด์ก์ ๋, n๋ณด๋ค ํฌ๊ณ , 2n๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฌ๋ฌ ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ฐ ์ผ์ด์ค๋ n์ ํฌํจํ๋ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ ๋ ฅ์ ๋ง์ง๋ง์๋ 0์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์, n๋ณด๋ค ํฌ๊ณ , 2n๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ต
case = []
case.append(int(input()))
while case[-1] != 0:
case.append(int(input()))
del case[-1]
numbers = [True for i in range((max(case) * 2)+1)]
numbers[0] = False
numbers[1] = False
for i in range(2, int(len(numbers)**0.5+1)):
if numbers[i]:
for n in range(i**2, len(numbers), i):
numbers[n] = False
for n in case:
result = 0
for t in range(n+1, (n * 2)+1):
if numbers[t] == True:
result += 1
print(result)
n+1๋ถํฐ 2n๊น์ง์ ์์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ก, ์ด์ ์ ํ์๋ ์์๊ตฌํ๊ธฐ ๋ฌธ์ ์ ์ ์ฌํ๋ค.
2021.03.09 - [๐์๊ณ ๋ฆฌ์ฆ/๋ฐฑ์ค] - [๋ฐฑ์ค/python] 1929๋ฒ : ์์ ๊ตฌํ๊ธฐ
case = []
case.append(int(input()))
while case[-1] != 0:
case.append(int(input()))
del case[-1]
์ ๋ ฅ์ ๋ฐ์ ํ ํ ์คํธ ์ผ์ด์ค๋ฅผ case์ ์ ์ฅํ๋ค.
๋ง์ง๋ง ์ ๋ ฅ์ ์ ๋ ฅ์ ์ข ๋ฃํ๋ ์๋ฏธ์ 0์ด๋ฏ๋ก ์ญ์ ํ๋ค.
numbers = [True for i in range((max(case) * 2)+1)]
numbers[0] = False
numbers[1] = False
์ ๋ ฅ๋ฐ์ ํ ์คํธ ์ผ์ด์ค์ ์ต๋๊ฐ์ ๋๋ฐฐํ ์๊ฐ ๊ฐ์ฅ ํฐ ๊ฐ์ด๋ฏ๋ก ๋ฒ์๋ฅผ ์์๊ฐ์ด ์ก์์ค๋ค.
๐ฅ ์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ range์ ์ ๋ ฅ๋ ์ซ์์ -1๊ฐ๊น์ง์ ์ธ๋ฑ์ค๊ฐ ๋ง๋ค์ด์ง๋ฏ๋ก +1ํด์ฃผ์ด์ผํ๋ค๋ ๊ฒ์ด๋ค.
0๊ณผ 1์ ์์๊ฐ ์๋๋ฏ๋ก ๋ฏธ๋ฆฌ False๋ก ๋ฐ๊ฟ์ค๋ค.
for i in range(2, int(len(numbers)**0.5+1)):
if numbers[i]:
for n in range(i**2, len(numbers), i):
numbers[n] = False
์ ์ฝ๋๋ ์์๋ฅผ ๊ตฌํ๋ ํต์ฌ ์ฝ๋๋ก ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ์ด์ฉํ๋ค.
์ด์ ๋ํด ์๋์ ๊ฒ์๋ฌผ์ ์์ธํ ์ ์ด ๋์๋ค.
2021.03.10 - [๐์๊ณ ๋ฆฌ์ฆ/๐ ๊ฐ๋ ์ ๋ฆฌ] - [ํ์ด์ฌ/python] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด
for n in case:
result = 0
for t in range(n+1, (n * 2)+1):
if numbers[t] == True:
result += 1
print(result)
๋ชจ๋ case์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ค.
์์๊ฐ ๋ช๊ฐ์ธ์ง ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ฏ๋ก result๋ฅผ ๋ง๋ค์ด ์ฃผ๊ณ
๋ฒ์๊ฐ n+1๋ถํฐ 2n๊น์ง์ด๋ฏ๋ก range(n+1, (n*2)+1)๋ก ์ค์ ํด์ค๋ค.
๐ฅ ์์์ ์ธ๊ธํ ์ฃผ์ํ ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก range์ ์ ๋ ฅ๋๋ ๋๊ฐ์ด ํฌํจ๋๋ ค๋ฉด +1์ ํด์ฃผ์ด์ผํ๋ค.
'๐์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/python] 9184๋ฒ : ์ ๋๋ ํจ์ ์คํ (0) | 2021.03.16 |
---|---|
[๋ฐฑ์ค/python] 1436๋ฒ : ์ํ๊ฐ๋ ์ (0) | 2021.03.16 |
[๋ฐฑ์ค/python] 1011๋ฒ : Fly me to the Alpha Centauri (0) | 2021.03.16 |
[๋ฐฑ์ค/python] 2839๋ฒ : ์คํ ๋ฐฐ๋ฌ (0) | 2021.03.16 |
[๋ฐฑ์ค/python] 1316๋ฒ : ๊ทธ๋ฃน ๋จ์ด ์ฒด์ปค (0) | 2021.03.16 |