본문 바로가기
알고리즘 테스트/이론

에라토스테네스의 체(소수 판별 알고리즘)

by codeyaki 2021. 12. 28.
반응형

유명한 소수 개수 찾기 알고리즘

다수의 소수를 찾을때 사용하는 알고리즘으로 하나의 숫자마다 소수인지 판별하는 것보다 효율적이라 많이 사용한다!

소수의 배수는 소수일수가 없다는 점을 이용한 알고리즘으로 2부터 숫자를 높여가며 자기 자신을 제외한 배수를 전부 지우는 방법이다.

 

방법

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

 

파이썬으로 구현하는 방법

n까지 숫자중에 소수인지 판별하는 방법 :

(예시 n=120)

n = 120
isPrime = [True for _ in range(n+1)]
isPrime[0]=isPrime[1]= False
for num in range(len(isPrime)) :
    if isPrime[num] :
        for i in range(num*2,len(isPrime),num) :
            isPrime[i] = False

prime = [i for i in range(n+1) if isPrime[i]]
print(prime)

>>

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113]

반응형