-
[파이썬] 소수의 개수(에라토스테너스 체)자료구조_알고리즘/알고리즘 2020. 9. 7. 12:31
에라토스테네스의 체란?
소수를 판별하는 알고리즘이다.
소수들을 대량으로 빠르고 정확하게 구하는 방법이다.
단일 숫자 소수 여부 확인
어떤 수의 소수의 여부를 확인 할 때는, 특정한 숫자의 제곱근 까지만 약수의 여부를 검증하면 O(N^1/2)의 시간 복잡도로 빠르게 구할 수 있다.
수가 수(N이라고 가정)를 나누면 몫이 생기는데, 몫과 나누는 수 둘 중 하나는 N 제곱근 이하이기 때문이다.
만약, 대량의 소수를 한꺼번에 판별해야할 경우는 '에라토스테네스의 체'를 이용한다.
에라토스테네스의 체 원리
에라토스테네스의 체는 가장 먼저 소수를 판별할 범위만큼 배열을 할당하여, 해당하는 값을 넣어주고, 이후에 하나씩 지워나가는 방법을 이용한다.
- 배열을 생성하여 초기화한다.
- 2부터 시작해서 특정 수의 배수에 해당하는 수를 모두 지운다.(지울 때 자기자신은 지우지 않고, 이미 지워진 수는 건너뛴다.)
- 2부터 시작하여 남아있는 수를 모두 출력한다.
파이썬 로직 :
''' 1. 판별하고 싶은 수 입력 ''' n = int(input()) ''' 2. 해당 수 만큼 배열 생성 ''' ch = [0] * (n+1) cnt =0 ''' 3. 해당 수 만큼 반복문을 돌면서 소수 cnt 개수 추가 안쪽 for 문에서 숫자의 배수를 지워나감. ''' for i in range(2, n+1): if ch[i] == 0: cnt +=1 for j in range(i, n+1 , i): ch[j] =1 print(cnt)
'자료구조_알고리즘 > 알고리즘' 카테고리의 다른 글
[파이썬] 자릿수의 합 (0) 2020.09.07