๐ŸŒฑ 4948 ๋ฒ ๋ฅดํŠธ๋ž‘ ๊ณต์ค€ ๐ŸŒฑ

happy_yunยท2021๋…„ 3์›” 18์ผ
0

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
2/2
post-thumbnail

BOJ, ๋ฒ ๋ฅดํŠธ๋ž‘ ๊ณต์ค€
์‚ฌ์šฉ์–ธ์–ด : python

1. ๋ฌธ์ œ

๋ฒ ๋ฅดํŠธ๋ž‘ ๊ณต์ค€์€ ์ž„์˜์˜ ์ž์—ฐ์ˆ˜ n์— ๋Œ€ํ•˜์—ฌ, n๋ณด๋‹ค ํฌ๊ณ , 2n๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜๋Š” ์ ์–ด๋„ ํ•˜๋‚˜ ์กด์žฌํ•œ๋‹ค๋Š” ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋‹ค.

์ด ๋ช…์ œ๋Š” ์กฐ์ œํ”„ ๋ฒ ๋ฅดํŠธ๋ž‘์ด 1845๋…„์— ์ถ”์ธกํ–ˆ๊ณ , ํŒŒํ”„๋ˆ„ํ‹ฐ ์ฒด๋น„์‡ผํ”„๊ฐ€ 1850๋…„์— ์ฆ๋ช…ํ–ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 10๋ณด๋‹ค ํฌ๊ณ , 20๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜๋Š” 4๊ฐœ๊ฐ€ ์žˆ๋‹ค. (11, 13, 17, 19) ๋˜, 14๋ณด๋‹ค ํฌ๊ณ , 28๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜๋Š” 3๊ฐœ๊ฐ€ ์žˆ๋‹ค. (17,19, 23)

์ž์—ฐ์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, n๋ณด๋‹ค ํฌ๊ณ , 2n๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

2. ํ’€์ด

์†Œ์ˆ˜ ๋ฌธ์ œ๋‹ค..!
์ง€๋‚œ ๋ฒˆ ์†Œ์ˆ˜ ๋ฌธ์ œ์—์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๊ฒช๊ณ  ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค ์ฒด๋ฅผ ์•Œ๊ฒŒ ๋์—ˆ๋‹ค.
(๋ฌด์ž‘์ • ๋ชจ๋“  ์ˆ˜๋ฅผ ๊ทธ ๋ฏธ๋งŒ ์ˆ˜๋“ค๋กœ ๋‚˜๋ˆ ๋ณด๋Š” ์•„์ฃผ ์—„์ฒญ๋‚œ ์ฝ”๋“œ๋ฅผ ์งฐ์—ˆ๋‹ค๋Š” ์†Œ์‹ใ…Žใ…Ž)
๊ทธ๋ž˜์„œ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ๋ฐ”๋กœ ์ƒ๊ฐํ–ˆ๋‹ค!

๐Ÿ“๋ฐฉ๋ฒ• 1 - ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค ์ฒด

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜๋‹ค.

์†Œ์ˆ˜๋ฅผ ์„ธ๋Š” ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์„œ, ์†Œ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ณ€์ˆ˜ count๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ 
์†Œ์ˆ˜ ์—ฌ๋ถ€๋ฅผ ํ‘œ์‹œํ•˜๋Š” prime_check๋ผ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.
(์ธ๋ฑ์Šค๊ฐ€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, 2์˜ ์†Œ์ˆ˜ ์—ฌ๋ถ€๋ฅผ index๊ฐ€ 2์ธ ๊ณณ์— ํ‘œ์‹œ๋ฅผ ํ•ด์ฃผ๊ณ  ์‹ถ์–ด์„œ ๊ธธ์ด๊ฐ€ num+1์ธ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.)

๊ทธ๋ฆฌ๊ณ  for๋ฌธ์„ ๋Œ๋ฉด์„œ ํ•ด๋‹น ์ˆ˜๊ฐ€ ์†Œ์ˆ˜๋ผ๋ฉด ๊ทธ ์ˆ˜์˜ ๋ฐฐ์ˆ˜๋“ค์„ ๋ชจ๋‘
prime_check์—์„œ 0์œผ๋กœ ํ‘œ์‹œํ•ด์ฃผ์—ˆ๋‹ค.
๋งˆ์ง€๋ง‰์— prime_check์—์„œ index 2๋ถ€ํ„ฐ num๊นŒ์ง€ ์›์†Œ๊ฐ€ 1์ผ ๋•Œ๋ฅผ countํ•ด์ฃผ๋ฉด ๋!
(์ธ๋ฑ์Šค 0๊ณผ 1์€ 0ํ•˜๊ณ  1์˜ ์†Œ์ˆ˜ ํŒ๋ณ„ ์ •๋ณด๋ผ์„œ ํ•„์š” No!)

#ํ•ด๋‹น ์ˆซ์ž ์ดํ•˜์˜ ์†Œ์ˆ˜ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
def prime_count(num):
    #์†Œ์ˆ˜์˜ ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ณ€์ˆ˜
    count = 0
    #์†Œ์ˆ˜ ์ฒดํฌ๋ฅผ ํ•ด์ฃผ๋Š” ๋ฆฌ์ŠคํŠธ
    prime_check = [1]*(num+1)
    #์—๋ผํ† ์Šคํ…Œ๋„ค์Šค ์ฒด๋ฅผ ์ด์šฉํ•œ ์†Œ์ˆ˜ ํŒ๋ณ„
    for i in range(2,num+1):
        if prime_check[i]:
            for j in range(i+i,num+1,i):
                prime_check[j] = 0
    #์†Œ์ˆ˜๋Š” 0,1์€ ํ•ด๋‹นํ•˜์ง€ ์•Š์œผ๋‹ˆ๊น
    for k in range(2,len(prime_check)):
        if prime_check[k]:
            count += 1
    return count

while True:
    #n์ด 0์ด ๋“ค์–ด์˜ฌ๋•Œ๊นŒ์ง€ ์ž…๋ ฅ ๋ฐ›๊ธฐ
    n = int(input())
    if n == 0:
        break
    print(prime_count(2*n)-prime_count(n))

๋ฌผ๋ก  ์ด ๋ฐฉ๋ฒ•๋„ ๋ฐฑ์ค€์—์„œ ์ •๋‹ต์œผ๋กœ ๋์ง€๋งŒ,
์ด์ „์— ์†Œ์ˆ˜ ๋ฌธ์ œ๋ณด๋‹ค ์‹œ๊ฐ„์ด ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ๋Š๊ปด์กŒ๋‹ค๐Ÿค”
๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ์ ์„ ๋ฐ”๋กœ ์ฐพ์•„์„œ ๋ฐ”๋กœ ์•„๋ž˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค์‹œ ํ’€์—ˆ๋‹ค..!

๐Ÿ“๋ฐฉ๋ฒ• 2 -์—๋ผํ† ์Šคํ…Œ๋„ค์Šค ์ฒด + ์ œ๊ณฑ๊ทผ ์ดํ•˜ ํŒ๋ณ„

๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ, sqrt(num)๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์• ๋“ค๋กœ๋งŒ ํŒ๋ณ„ํ•˜๋ฉด ๋๋‹ค๐Ÿคง
์™œ? ์ฐฌ์ฐฌํžˆ ์†Œ์ˆ˜ ํŒ๋ณ„ ๊ณผ์ •์„ ๋”ฐ๋ผ๊ฐ€๋ณด๋ฉด!

์–ด๋–ค ์ˆ˜(k)๊ฐ€ ์†Œ์ˆ˜๊ฐ€ ๋˜๋ ค๋ฉด 1๊ณผ ์ž๊ธฐ ์ž์‹ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋‚˜๋ˆ ๋–จ์–ด์ง€๋ฉด ์•ˆ๋œ๋‹ค.
๊ทธ๋Ÿผ 2๋ถ€ํ„ฐ k-1๊นŒ์ง€ ์ˆ˜๋“ค๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š์œผ๋ฉด ๋˜๊ฒ ๋„ค?!
ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๊ตณ์ด ๋‹ค ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค!
k๋Š” sqrt(k) ๊ณฑํ•˜๊ธฐ sqrt(k) ๋˜๋Š” sqrt(k)๋ณด๋‹ค ์ž‘์€ ์ˆ˜์™€ ํฐ ์ˆ˜์˜ ๊ณฑ์œผ๋กœ
๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—!
์—ฌ๊ธฐ์„œ๋„ num์ดํ•˜ ์นœ๊ตฌ๋“ค์ด ์†Œ์ˆ˜์ธ์ง€ ํ™•์ธ ํ•  ๋•Œ, sqrt(num)์ดํ•˜
์ˆ˜๋“ค๋กœ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค ์ฒด๋ฅผ ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค!!!

def prime_count(num):
    count = 0
    prime_check = [1]*(num+1)
    for i in range(2,int(num**0.5)+1):
        if prime_check[i]:
            for j in range(i+i,num+1,i):
                prime_check[j] = 0

    for k in range(2,num+1):
        if prime_check[k]:
            count +=1
    return count

while True:
    n = int(input())
    if n == 0:
        break
    print(prime_count(2*n)-prime_count(n))

์ด๋ ‡๊ฒŒ ๊ณ ์น˜๊ณ  ๋Œ๋ฆฌ๋‹ˆ, ์‹œ๊ฐ„์ด ํ›จ์”ฌ ์ค„์–ด๋“ค์—ˆ๋‹ค!

profile
์ฒœ์ฒœํžˆ ๊พธ์ค€ํžˆ

0๊ฐœ์˜ ๋Œ“๊ธ€