흰 스타렉스에서 내가 내리지

[알고리즘] 에라토스테네스의 체(Sieve of Eratosthenes) 본문

Algorithm

[알고리즘] 에라토스테네스의 체(Sieve of Eratosthenes)

주씨. 2022. 1. 3. 16:55
728x90

에라토스테네스가 발견한 소수를 찾는 방법이다.

알고리즘

  1. 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으로 두른 수들이 여기에 해당한다.
  2. 2는 소수이므로 오른쪽에 2를 쓴다. 
  3. 자기 자신을 제외한 2의 배수를 모두 지운다.
  4. 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다. 
  5. 자기 자신을 제외한 3의 배수를 모두 지운다.
  6. 남아있는 수 가운데 5는 소수이므로 오른쪽에 5를 쓴다. 
  7. 자기 자신을 제외한 5의 배수를 모두 지운다.
  8. 남아있는 수 가운데 7은 소수이므로 오른쪽에 7을 쓴다.
  9. 자기 자신을 제외한 7의 배수를 모두 지운다.
  10. 위의 과정을 반복하면 구하는 구간의 모든 소수가 남는다.

 

import math

n = 1000
arr = [True for i in range(n+1)]
arr[1] = False    # 1은 소수가 아니다

for i in range(2, int(math.sqrt(n))+1):
    if arr[i] == True:
        j = 2
        while i*j <= n:
            arr[i*j] = False
            j += 1
            
            
for i in range(2, n+1):
    if arr[i]:
        print(i, end = ' ')

 

시간복잡도 : O(NloglogN)으로 사실상 선형시간에 동작할 정도로 빠르다.