- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 공유대학
- 백준
- 연결리스트
- C언어
- 컴퓨터공학과
- C++
- 알고리즘
- 구글 로그인
- 코딩테스트
- Java
- 정렬
- Firebase
- oauth
- 자료구조
- 비주얼 베이직
- 동적할당
- android studio
- til
- 로그인
- 파이썬
- 안드로이드
- python
- 배열
- sql
- 안드로이드 스튜디오
- 자바
- 프로그래머스
- 프로그래밍 입문
- firebase google
Archives
코딩하는 해달이
[알고리즘] 에라토스테네스의 체 본문
알고리즘
- 초기 sieve 배열의 모든 값은 0으로 초기화되어 있습니다.
- 2부터 차례대로 정수를 살펴 봅니다.
- 2가 소수입니다. 따라서, 2의 배수들은 sieve[x] = 1로 전부 표시해 놓습니다.
- 이럴 경우 sieve[4] = sieve[6] = sieve[8] = … = 1이 됩니다.
- 이제 다음 숫자를 살펴봅니다. (sieve[x] == 1인 x는 살펴보지 않고 반복문상에서 건너뛸 수 있습니다.)
- 3은 sieve[3] = 0 이었습니다. 따라서 소수이며, 3의 배수들은 전부 1로 표시해 놓습니다.
- 4를 봅니다. 4는 이미 sieve[4] = 1이므로 건너뜁니다.
- 5를 봅니다. sieve[5] = 0 이므로 소수이며, 5의 배수들은 전부 1로 표시해 놓습니다.
- …
C++ 코드
#include <iostream>
#include <cmath>
int main() {
int arr[1000000] = { 0, };
for (int i = 2; i <= n; i++) {
arr[i] = i;
}
for (int i = 2; i <= sqrt(n); i++) {
if (arr[i] == 0) continue;
for (int j = i + i; j <= n; j += i) {
arr[j] = 0;
}
}
}
반응형
'개인 공부 > 알고리즘&자료구조' 카테고리의 다른 글
[자료구조] 자료구조 수업 과제 2 (0) | 2022.11.19 |
---|---|
[자료구조] 자료구조 수업 과제 1 (0) | 2022.11.19 |
[자료구조] 스택(Stack)이란? (2) | 2022.11.09 |
[자료구조] 연결 리스트(Linked List)란? (2) | 2022.11.08 |
[알고리즘] 유클리드 호제법 (0) | 2022.07.26 |
Comments