Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Algorithm
- 따라하며 배우는 C언어
- BOJ
- Algospot
- web
- JavaScript
- 따배씨
- BASIC
- Python
- Math
- 백준
- 생활코딩
- 인프런
- programmers
- php
- udemy
- C
- 종만북
- greedy
- sorting
- String
- BFS
- graph
- DP
- Cleancode
- server
- C언어
- 정수론
- dfs
- 따라하면서 배우는 C언어
Archives
- Today
- Total
몽상실현개발주의
[종만북] 에라토스테네스의 체 / 정수론 / Python 파이썬 본문
[종만북] 에라토스테네스의 체 / 정수론 / Python 파이썬
N 까지의 모든 소수를 구하는 방법이다.
소수 판별을 위하여 (N ^ 0.5) 까지의 모든 수로 나눠보는 대신, (N ^ 0.5) 까지 순회하며 소수를 찾을 때마다 그 배수들을 지우는 형태로동작하기 때문에 훨씬 빠르게 수행된다.
최적화
- N 이 아니라 (N ^ 0.5) 까지만 순회.
- i 의 배수들을 모두 지울 때 2xi 에서 시작하는 것 이 아니라 (i X i) 에서 시작 / 2Xi, 3Xi 는 2 와 3의 배수를 지울때 삭제되기 때문
# 에라토스테네스의 체
def eratosthenes(N):
nums = [1] * (N+1)
nums[0] = 0
nums[1] = 0
sqrtn = int(N ** 0.5)
for i in range(sqrtn+1):
if nums[i]:
# ( i+i = 2 * i ) 는 2의 배수를 지울 때, 3*i 는 3의 배수를 지울때 지워졌을 것이므로,
# i * i 부터 탐색
for j in range(i*i, N+1, i):
nums[j] = 0
return nums
print(eratosthenes(10))
'Language > Algorithm' 카테고리의 다른 글
[종만북] 약수의 개수 구하기 / 정수론 / Python 파이썬 (0) | 2021.09.22 |
---|---|
[종만북] 빠른 소인수 분해 (에라토스테네스의 체 사용) / 정수론 / Python 파이썬 (0) | 2021.09.22 |
[종만북] 간단한 소인수 분해 / 정수론 / Python 파이썬 (0) | 2021.09.22 |
[종만북] 소수 판별 O(N ^ 0.5 ) / 정수론 / Python 파이썬 (0) | 2021.09.22 |
[알고리즘 기초] 09_SW 문제해결 응용_2 / Python (0) | 2021.06.14 |
Comments