Notice
Recent Posts
Recent Comments
12-12 11:30
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- AWS
- join
- 정규화
- SAA-C02
- sql
- 백준 2852
- github
- 백준 1756
- 프로그래머스 조건에 맞는 개발자 찾기
- 백준 24499 파이썬
- SQLD
- react
- 깃허브
- 백준 11059
- 알고리즘
- 백준 크리문자열
- ROWNUM
- 파이썬
- 리스트 컴프리헨션
- 데이터베이스
Archives
- Today
- Total
-
에라토스테네스의 체 (소수 구하기 알고리즘) 본문
반응형
소수를 찾는 알고리즘이다.
방법은 다음과 같다.
- 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으로 두른 수들이 여기에 해당한다.
- 2는 소수이므로 오른쪽에 2를 쓴다. (빨간색)
- 자기 자신을 제외한 2의 배수를 모두 지운다.
- 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다. (초록색)
- 자기 자신을 제외한 3의 배수를 모두 지운다.
- 남아있는 수 가운데 5는 소수이므로 오른쪽에 5를 쓴다. (파란색)
- 자기 자신을 제외한 5의 배수를 모두 지운다.
- 남아있는 수 가운데 7은 소수이므로 오른쪽에 7을 쓴다. (노란색)
- 자기 자신을 제외한 7의 배수를 모두 지운다.
- 위의 과정을 반복하면 구하는 구간의 모든 소수가 남는다.
파이썬 코드로 구현
def prime_list(n):
# 에라토스테네스의 체 초기화: n개 요소에 True 설정(소수로 간주)
sieve = [True] * n
# n의 최대 약수가 sqrt(n) 이하이므로 i=sqrt(n)까지 검사
m = int(n ** 0.5)
for i in range(2, m + 1):
if sieve[i] == True: # i가 소수인 경우
for j in range(i+i, n, i): # i이후 i의 배수들을 False 판정
sieve[j] = False
# 소수 목록 산출
return [i for i in range(2, n) if sieve[i] == True]
반응형
'Algorithm' 카테고리의 다른 글
[백준] 3190 - 뱀 (0) | 2023.12.09 |
---|---|
[백준 1347] 미로 만들기 파이썬 (0) | 2023.10.09 |
[백준 1929] 소수 구하기 - 파이썬 (0) | 2023.04.29 |
[백준 10816] 숫자 카드 2 - 파이썬 (0) | 2023.04.27 |
[백준 4949] 균형잡힌 세상 - 파이썬 (0) | 2023.04.26 |
Comments