1 ๋ถ„ ์†Œ์š”

์†Œ์ˆ˜ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์†Œ์ˆ˜๋Š” 1๊ณผ ์ž๊ธฐ์ž์‹ ๋งŒ์„ ์•ฝ์ˆ˜๋กœ ๊ฐ–๋Š” 2์ด์ƒ์˜ ์ž์—ฐ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.

2, 3, 5, 7, 11, 13 ...

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๋ณด๋‹ˆ, ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค์–‘ํ•˜๊ธธ๋ž˜ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.

๊ทธ๋ƒฅ ๋‚˜๋ˆ !

์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ๊ทธ๋ƒฅ ๊ณ„์†ํ•ด์„œ ๋‚˜๋ˆ„์–ด๋ณด๋Š” ๋ฐฉ์‹์ด๋‹ค.
์ฃผ๋จน๊ตฌ๊ตฌ์‹ ๋ฐฉ๋ฒ•์ด๊ธด ํ•œ๋ฐ, ๋‚˜๋ฆ„ ๊ดœ์ฐฎ์•˜๋‹ค.

๋จผ์ € ์ˆ˜๋“ค์ด ๊ฐ–๋Š” ์•ฝ์ˆ˜์˜ ํŠน์ง•์„ ๋ณด๋ฉด, ํ•ญ์ƒ ๋Œ€์นญ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃฌ๋‹ค๋Š” ์ ์ด๋‹ค.

8 : 1, 2, 4, 8
25 : 1, 5, 25
62 : 1, 2, 31, 62
...

์ด ์ฒ˜๋Ÿผ ์•ฝ์ˆ˜๋Š” ๋Œ€์นญ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๊ณ , ๋Œ€์นญ์„ ์ด๋ฃจ๋Š” ๊ทธ ๊ธฐ์ค€์€ ์ œ๊ณฑ๊ทผ์ด๋‹ค.
์ฃผ์–ด์ง„ ์ˆ˜์˜ ์ œ๊ณฑ๊ทผ์„ ๊ธฐ์ค€์œผ๋กœ ์‚ดํŽด๋ณด์ž.
n = p * q๋กœ ์ƒ๊ฐํ–ˆ์„ ๋•Œ, p์™€ q์ค‘ ํ•œ ์ˆ˜๋Š” ํ•ญ์ƒ \(\sqrt{n}\) ์ดํ•˜, ํ•œ ์ˆ˜๋Š” ํ•ญ์ƒ \(\sqrt{n}\) ์ด์ƒ์ด๋‹ค.


์ด๊ฑธ ์ ์šฉํ•ด์„œ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

def is_prime(n):
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True

๋ฐ˜๋ณตํ•˜๋Š” ์ผ์ด ๋งŽ์€ ๊ฒฝ์šฐ์—๋Š” int(math.sqrt(n))์„ for๋ฌธ์˜ ์กฐ๊ฑด์‹์— ๋„ฃ๊ฒŒ๋˜๋ฉด ๊ณ„์†ํ•ด์„œ ์ œ๊ณฑ๊ทผ์„ ๊ตฌํ•˜๋Š” ๋™์ž‘์ด ํ•„์š”ํ•˜๋ฏ€๋กœ, m = int(math.sqrt(n)) ์ฒ˜๋Ÿผ ๋ณ€์ˆ˜๋กœ ๋นผ์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค.

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋Œ€ํšŒ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์ด๋ผ๊ณ  ํ•œ๋‹ค.
์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฐฉ์‹์€ ๋‚˜๋ฌด์œ„ํ‚ค์—์„œ ํ™•์ธํ–ˆ๋‹ค.
์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ์†Œ์ˆ˜๋ฅผ 2๋ถ€ํ„ฐ ๋‚˜์—ดํ•œ๋‹ค.
  2. 2๋Š” ์†Œ์ˆ˜์ด๋ฏ€๋กœ ๋นผ๋†“๊ณ , 2๋ฅผ ์ œ์™ธํ•œ 2์˜ ๋ฐฐ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ง€์šด๋‹ค.
  3. 3์€ ์†Œ์ˆ˜์ด๋ฏ€๋กœ ๋นผ๋†“๊ณ , 3์„ ์ œ์™ธํ•œ 3์˜ ๋ฐฐ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ง€์šด๋‹ค.
  4. 4๋Š” 2๋ฒˆ๊ณผ์ •์—์„œ ์ด๋ฏธ ์ง€์›Œ์กŒ์œผ๋ฏ€๋กœ ๊ฑด๋„ˆ๋›ด๋‹ค.
  5. 5๋Š” ์†Œ์ˆ˜์ด๋ฏ€๋กœ ๋นผ๋†“๊ณ , 5๋ฅผ ์ œ์™ธํ•œ 5์˜ ๋ฐฐ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ง€์šด๋‹ค.
  6. 7์€ ์†Œ์ˆ˜์ด๋ฏ€๋กœ ๋นผ๋†“๊ณ , 7์„ ์ œ์™ธํ•œ 7์˜ ๋ฐฐ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ง€์šด๋‹ค.
  7. ์œ„ ๊ณผ์ •์„ ๊ตฌ๊ฐ„ ๋‚ด์—์„œ ๊ณ„์†ํ•ด์„œ ๋ฐ˜๋ณตํ•˜๋ฉด, ๊ตฌ๊ฐ„ ๋‚ด์˜ ๋ชจ๋“  ์†Œ์ˆ˜๊ฐ€ ๋‚จ๋Š”๋‹ค.

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

def eratos(n):
    # ์ฒ˜์Œ ๋ชจ๋“  ์ˆ˜๋ฅผ ์†Œ์ˆ˜๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ์–ด์ฐจํ”ผ ์ง€์›Œ๊ฐˆ๊ฑฐ๋‹ˆ๊นŒ.
    arr = [1 for i in range(n + 1)]
    
    if n <= 1:
        return False
    else:
        for i in range(2, n):
            if arr[i]:
                for j in range(i + i, n, i): # i์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ง€์šฐ๊ธฐ ์œ„ํ•ด i๋งŒํผ ์ฆ๊ฐ€(i + i ๋Œ€์‹  i * 2๋„ ๊ฐ€๋Šฅ)
                    arr[j] = False
        return [i for i in range(2, n) if arr[i]]

์—ฌ๊ธฐ์„œ for j in range(i + i, n, i)๊ฐ€ ๊ฐ€์žฅ ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋Š” ๋ถ€๋ถ„์ด์—ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ง์ ‘ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๊ณ , ์—ฌ๋Ÿฌ ์ผ€์ด์Šค๋“ค์„ ๋ฐ”๊ฟ”๊ฐ€๋ฉด์„œ ํ™•์ธํ–ˆ๋‹ค.
์ƒ๊ฐ์ด ์ค‘๊ฐ„์— ๊ผฌ์˜€์—ˆ๋˜๊ฑฐ์˜€๋‹ค.
์˜ˆ๋ฅผ ๋“ค๋ฉด, 3์€ ์†Œ์ˆ˜๋‹ˆ๊นŒ 3์„ ์ œ์™ธํ•œ 3์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ง€์›Œ์•ผํ•˜๋Š”๊ฑฐ๋‹ˆ๊นŒ, 3์˜ ๋ฐฐ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜์ธ 3 * 2 == 3 + 3๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š”๊ฒŒ ๋งž์•˜๋‹ค.
์ฆ๊ฐ€ํญ์€ ๋ฐฐ์ˆ˜๋ฅผ ์ฐพ์•„์•ผํ•˜๋‹ˆ ๋‹น์—ฐํžˆ i๋งŒํผ ์ฆ๊ฐ€ํ•˜๋Š”๊ฒŒ ๋งž๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

[https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98%EC%B2%B4](https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98%EC%B2%B4)

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ