[Algorithm] ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด | ์†Œ์ˆ˜ ์ฐพ๊ธฐ
๐Ÿ–ฅ CS/Algorithm

[Algorithm] ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด | ์†Œ์ˆ˜ ์ฐพ๊ธฐ

์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ธ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

 

์ถœ์ฒ˜: https://ko.wikipedia.org/wiki/์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜_์ฒด

 

์›๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

๐Ÿ’ก 0๋ถ€ํ„ฐ ๊ตฌํ•˜๊ณ ์žํ•˜๋Š” ์ˆ˜(n)๊นŒ์ง€ True๋กœ ์ฑ„์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
๐Ÿ’ก 2๋ฅผ ์ œ์™ธํ•œ 2์˜ ๋ฐฐ์ˆ˜๋ฅผ False๋กœ ๋ฐ”๊พผ๋‹ค.
๐Ÿ’ก 3์„ ์ œ์™ธํ•œ 3์˜ ๋ฐฐ์ˆ˜๋ฅผ False๋กœ ๋ฐ”๊พผ๋‹ค.
๐Ÿ’ก 5๋ฅผ ์ œ์™ธํ•œ 5์˜ ๋ฐฐ์ˆ˜๋ฅผ False๋กœ ๋ฐ”๊พผ๋‹ค.
.
.
.
๐Ÿ’กn์˜ ์ตœ๋Œ€ ์•ฝ์ˆ˜๋Š” sqrt(n) ์ดํ•˜์ด๋ฏ€๋กœ sqrt(n)์˜ ๋ฐฐ์ˆ˜๋ฅผ ๋ชจ๋‘ False๋กœ ๋ฐ”๊พผ๋‹ค.
๐Ÿ’ก2~n๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ True์ธ ์ˆซ์ž๋“ค์ด ์†Œ์ˆ˜๊ฐ€ ๋œ๋‹ค.

 

 

์ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

def isPrime(n):
	sieve = [True] * n
    
    # n์˜ ์ตœ๋Œ€ ์•ฝ์ˆ˜๋Š” sqrt(n) ์ดํ•˜
    m = int(n ** 0.5)
    
    for i in range(2, m+1):
    	if sieve[i] == True: # i๊ฐ€ ์†Œ์ˆ˜์ธ ๊ฒฝ์šฐ
        	for j in range(i+i, n, i): 
            	sieve[j] = False # i ์ดํ›„ i์˜ ๋ฐฐ์ˆ˜๋Š” ์†Œ์ˆ˜๊ฐ€ ์•„๋‹˜
    
    # 2๋ถ€ํ„ฐ n๊นŒ์ง€ ์†Œ์ˆ˜ ๋ชฉ๋ก ์‚ฐ์ถœ
    return [i for i in range(2, n) if sieve[i] == True]