๐ ๋ฌธ์
์ด๋ค ์ ์ X๊ฐ 1๋ณด๋ค ํฐ ์ ๊ณฑ์๋ก ๋๋์ด ๋จ์ด์ง์ง ์์ ๋, ๊ทธ ์๋ฅผ ์ ๊ณฑใดใด์๋ผ๊ณ ํ๋ค. ์ ๊ณฑ์๋ ์ ์์ ์ ๊ณฑ์ด๋ค. min๊ณผ max๊ฐ ์ฃผ์ด์ง๋ฉด, min๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , max๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ๊ณฑใดใด์๊ฐ ๋ช ๊ฐ ์๋์ง ์ถ๋ ฅํ๋ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ์ ์ min๊ณผ max๊ฐ ์ฃผ์ด์ง๋ค.
๐์ถ๋ ฅ
์ฒซ์งธ ์ค์ min๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , max๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ๊ณฑใดใด์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
โโ์ ํ
- 1 ≤ min ≤ 1,000,000,000,000
- min ≤ max ≤ min + 1,000,000
๐ ๋ฌธ์ ํ์ด
์ ๊ณฑใดใด์๋ ์ ๊ณฑ์๋ก ๋๋์ด ๋จ์ด์ง์ง ์๋ ์, ์๋ฅผ ๋ค์ด 1,2,3,5,6,7,10์ ์๋ฏธํ๋ค. 4์ 8์ 2์ ์ ๊ณฑ์ 4๋ก ๋๋์ด ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ ์ ์ธ ๋๋ ๊ฒ์ด๋ค.
์ฒ์์๋ ํ๋ณด ์ซ์ ๋ฒ์ ๋ฆฌ์คํธ(n <= i <= m, ์ด๋ n=min, m=max)๋ฅผ ๋ง๋ค๊ณ ์ ๊ณฑ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ๋๋์ด ๋จ์ด์ง๋์ง ์ฒดํฌํ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ์ ๊ทผํ์๋๋ฐ ๋ฉ๋ชจ๋ฆฌ์ด๊ณผ๊ฐ ๋์๋ค.
๊ทธ๋์ ๋ฐฉ๋ฒ์ ๋ฐ๊พธ์ด ํ๋ณด ์ซ์ ๋ฒ์ ๋ฆฌ์คํธ์ ์์๋ก ์ซ์๋ฅผ ๋ฃ๋๊ฒ ์๋๋ผ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ ๊ทธ ์๊ฐ ์ ๊ณฑใดใด์์ธ์ง ํ์ธํ์๋ค.
์ฆ ์ด๊ธฐํ๋ฅผ arr = [1]*(m-n+1) ์ด๋ฐ ์์ผ๋ก ํ๊ณ ๋ฐฉ๋ฌธํ๋ฉด 0์ผ๋ก ๊ฐ์ ๋ณ๊ฒฝํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์๋ sum(arr)๋ก 1์ ๊ฐ์ ์ธก์ ํ๋ค.
์ ๊ณฑ๊ทผ ๋ฆฌ์คํธ๋ 2๋ถํฐ m์ ์ ๊ณฑ๊ทผ ๊น์ง์ด๋ค.
ํ๋์ฉ ์ ๊ณฑํด์ค๋ค์ ๋ฐฐ์๊ฐ n๊ณผ m๋ฒ์ ์์ ์๋ค๋ฉด arr ๋ฐฐ์ด์ 0์ผ๋ก ์ด๊ธฐํ ํด์ค๋ค.
๐ป ์ฝ๋_1
n,m = map(int,input().split()) # min, max
sqrt_nums = [i**2 for i in range(2, int(m**0.5)+1)] # ์ ๊ณฑ๊ทผ ๋ฆฌ์คํธ
arr = [1]*(m-n+1) # ์ ๊ณฑใดใด์ ํ์ธ ๋ฐฐ์ด
for i in sqrt_nums:
tmp = (n//i)*i
# ๋ฒ์ ์๊น์ง
while tmp<=m:
# ๋ฒ์ ์์ด๋ผ๋ฉด 0์ผ๋ก ์ด๊ธฐํ
if n <= tmp and tmp <= m:
arr[tmp-n] = 0
tmp += i # ๋ฐฐ์
print(sum(arr))
์ฒซ๋ฒ์งธ ์ ๋ต ์ฝ๋๋ ์ด๋ ๊ฒ ๋์๋ค. ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ์ ์ฝ๋๋ฅผ ๋น๊ตํด๋ณด๋ ๊ณต๊ฐ๋ณต์ก๋๊ฐ ์กฐ๊ธ ๋ง์ด ๋์ค๋๊ฒ ๊ฐ์์ ์ ๊ณฑ๊ทผ ๋ฆฌ์คํธ๋ฅผ ๋ฐ๋ก ๋ง๋ค์ง ์์๋ณด์๋ค.
๐ป ์ฝ๋_2
n,m = map(int,input().split())
arr = [1]*(m-n+1)
sqr = 2
while sqr <= int(m**0.5):
i = sqr**2
tmp = (n//i)*i
while tmp<=m:
if n <= tmp and tmp <= m:
arr[tmp-n] = 0
tmp += i
sqr += 1
print(sum(arr))
์ด๋ ๊ฒ ํ์๋๋ ๊ณต๊ฐ๋ณต์ก๋๋ ์ค์์ง๋ง ์๊ฐ๋ณต์ก๋๊ฐ ๋์ด๋ฌ๋ค. ๋์ด๋ ์ด์ ๋ ์ฒซ๋ฒ์งธ while ๋ฌธ์ ํ์ธ ์ฐ์ฐ์ธ sqr <= int(m**0.5) ์์ ๋งค๋ฒ m**0.5 ์ฐ์ฐ์ ํ์ฌ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฐ๋ค๊ณ ์๊ฐํด ๋ณ์๋ฅผ ๋ง๋ ๋ค์ ์ฌ๋ฌ๋ฒ ์ฐ์ฐํ์ง ์๊ฒ ํ์๋๋ ์๊ฐ์ด ๋ง์ด ์ค์๋ค.
๐ป ์ฝ๋_3
n,m = map(int,input().split())
last = int(m**0.5)
arr = [1]*(m-n+1)
sqr = 2
while sqr <= last:
i = sqr**2
tmp = (n//i)*i
while tmp<=m:
if n <= tmp and tmp <= m:
arr[tmp-n] = 0
tmp += i
sqr += 1
print(sum(arr))
๐ญ ์ํ์ฐฉ์ค
๐ ๋ฌธ์ ๋งํฌ ์ ๊ณฑ ใดใด ์
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2174๋ฒ: ๋ก๋ด ์๋ฎฌ๋ ์ด์ - ํ์ด์ฌ (0) | 2022.09.04 |
---|---|
[๋ฐฑ์ค] 1219๋ฒ: ์ค๋ฏผ์์ ๊ณ ๋ฏผ - ํ์ด์ฌ (๋ฒจ๋ง ํฌ๋, BFS) (2) | 2022.08.28 |
[๋ฐฑ์ค] 1041๋ฒ: ์ฃผ์ฌ์ - ํ์ด์ฌ (0) | 2022.08.20 |
[๋ฐฑ์ค] 1865๋ฒ: ์ํ - ํ์ด์ฌ (2) | 2022.08.06 |
[๋ฐฑ์ค] 9019๋ฒ: DSLR - ํ์ด์ฌ (0) | 2022.08.03 |