에라토스테네스의 체

ddullgi·2022년 11월 30일
1
post-thumbnail

수학에서 에라토스테네스의 체는 소수를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다.

구현법

구현 순서

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

python으로 구현

1부터 n사이의 소수 판별

def prime_list(n):
    # 플래그를 생성하여 에라토스테네스의 체를 초기화 한다.
    # 배열의 값이 1일 경우 아직 걸러지지 않은 상태이다.
    arr = [1] * (n+1) # n을 포함하여 판별하기 위해 (n+1)개를 생성
	
    # n의 최대 약수가 root(n)이하이기 때문에 i = sqrt(n)까지만 판별 한다
    m = int(n ** 0.5)
    for i in range(2, m + 1): # 체의 시작이 2부터 이기 때문에 2부터 확인
        if sieve[i] == 1:       # i가 소수인 경우(걸러지지 않음)    
            for j in range(i+i, n, i):  # i 이후의 i의 배수들에 값을 0으로 저장
                arr[j] = 0
	
    # 소수의 목록을 반환
    return [i for i in range(2, n) if sieve[i] == True]
profile
프론트엔드개발자를 꿈꾸는 예비 개발자

0개의 댓글