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 |
Tags
- 포스코 ai 교육
- dfs문제
- 삼성코테
- 임베디드 딥러닝
- 포스코 교육
- 자료구조
- tflite
- 초소형머신러닝
- bfs문제
- BFS
- DP문제
- 삼성코딩테스트
- 코테
- 그리디
- 딥러닝
- DP
- 삼성역테
- 다이나믹프로그래밍
- sort
- 코테 문제
- 포스코 AI교육
- TensorFlow Lite
- 삼성역량테스트
- 영상처리
- 알고리즘
- MCU 딥러닝
- tinyml
- 코딩테스트
- 컴퓨팅사고
- dfs
Archives
- Today
- Total
코딩뚠뚠
[기본문제풀이] 에라토스테네스의 체 본문
반응형
풀이 일시 : 2020-08-13
에라토스테네스의 체 :
소수(prime number) 판별 알고리즘이다.
어떤 수로도 나뉘어지지 않아야 되기 때문에 그 수를 나눠보면서 판단할 수 있다..
-> 이 방법은 O(N)의 복잡도를 갖는다. 모든 수를 체크했기 때문이다.
제곱근까지만 약수의 여부를 검증한다
-> 이 방법은 O(N^(1/2))로 계산이 가능하다.
-> int end = (int)sqrt(x)로 두고 x의 소수를 구하려면 2~end까지 체크한다.
문제 :
에라토스테네스의 체를 이용하여 소수를 출력하여라.
풀이 :
1. 이차원 배열을 생성하여 값을 초기화한다.
2. 2부터 시작해서 특정 숫자의 배수에 해당하는 숫자들을 모두 지운다. (자신은 지우지않는다.)
3. 3의 배수도 지운다. (자신은 지우지 않고 이미 지운경우는 건너뛴다.)
4. 남아있는 숫자들을 출력한다. (소수를 출력)
#include <stdio.h>
int number = 100000;
int a[100001];
void primeNumberSieve() {
for (int i = 2; i <= number; i++) {
a[i] = i; //배열을 다 초기화해준다.
}
for (int i = 2; i <= number; i++) {
if (a[i] == 0) continue; //이미 방문했던곳은 방문하지않는다.
for (int j = i+i; j <= number; j += i) { //배수
a[j] = 0; //방문처리
}
}
for (int i = 2; i <= number; i++) {
if (a[i] != 0) //0으로 변하지 않은 남은 소수부분 출력
printf("%d ", a[i]);
}
}
int main() {
primeNumberSieve();
}
반응형
'알고리즘 문제풀이 > 기본문제풀이' 카테고리의 다른 글
[기본문제풀이] floydwarshall (0) | 2020.12.28 |
---|---|
[기본문제풀이] dijkstra algorithm (0) | 2020.12.28 |
[기본문제풀이] dynamic_programming (0) | 2020.12.28 |
[기본문제풀이] traversal (0) | 2020.12.28 |
[기본문제풀이] union_find (0) | 2020.12.28 |