알고리즘

에라토스테네스의 체

zhelddustmq 2024. 7. 9. 11:33

1. 에라토스테네스의 체: 2부터 배수들을 지워나가며 지워지지 않은 제일 처음 수가 소수가 되고, 또 그 소수의 배수를 지워나가며 소수를 찾는 방법

 

2. 1부터 N까지 소수가 몇개인지 판별하는 방법

 2-1 약수가 있는지 확인해서 끝까지 조사해서 없으면 소수( 시간 복잡도: O(N^2) )

 2-2 √N까지만 조사해서 없으면 소수( 시간 복잡도: O(NlogN) )

 

 2-3 에라토스테네스의 체 이용( 시간 복잡도: O(Nlog(logN)) )

 

3. 에라토스테네스를 활용해, 소수 구분하는 동작 순서

 

1) 2부터 N까지 모든 정수를 적음

2) 아직 지우지 않은 소수 중 가장 작은 소수를 찾음(이 수를 P라고 함)

3) 아직 지우지 않은 수들 중, P의 배수를 크기 순서대로 지움

4) 아직 모든 수를 지우지 않았다면 2) 단계로 돌아감.

 

 

 

코드 구현:

#2부터 N까지 True인 boolean 배열 생성
is_prime = [True] * (N - 1) 

for i in range(2, N+1):
	#아직 지우지 않은 수 중 가장 작은 소수를 찾음
    if is_prime[i]:
    	for j in range(i * 2, N + 1, i):
        	#j가 소수가 아님을 is_prime 배열에 체크
        	if is_prime[j]: 
            	is_prime[j] = False