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
- Synchronization
- 프록시서버
- 세마포어와 뮤텍스
- 세마포어와 뮤텍스의 차이
- 싸피 면접 후기
- 클라우드 서버
- floyd-warshall
- 다익스트라 알고리즘
- 삼성 청년 SW 아카데미
- 세마포어란?
- 플로이드 워셜
- 호스팅이란?
- 호스팅
- 플로이드 와샬
- 서버 호스팅
- 프록시
- Proxy Server
- 싸피
- 뮤텍스
- 싸피 합격
- 동기화
- SSAFY
- 세마포어
- 다익스트라
- Dijkstra Algorithm
- Proxy
- 뮤텍스란?
- 웹 호스팅
- 최단 경로
Archives
- Today
- Total
어제의 나보다 성장한 오늘의 나
[알고리즘] 에라토스테네스의 체 ( 소수 구하기 ) 본문
사실 소수를 구할 때 간단하게 생각한다면 이렇게 구현할 수 있을 것이다.
bool isPrimeNumber(int a){
for(int i = 2 ; i < a ; i++){
if(a % i == 0){
return false;
}
}
return true; // 소수일경우
}
하지만 위와 같은 알고리즘의 시간 복잡도는 O(N)이다. 모든 경우의 수를 다 돌며 약수 여부를 확인한다는 점에서 몹시 비효율적이다. 하지만 에라토스테네스의 체를 이용한다면 한 두개의 소수를 판별하는 게 아니라 대량의 소수를 한꺼번에 판별하기에 용이하다.
int MAX=120;
boolean [] primeNum=new boolean[MAX+1];
for(int i=2; i<=MAX; i++) {
for(int j=2; i*j<=MAX; j++) {
primeNum[i*j]=true;
}
}
for(int i=2; i<=MAX; i++) {
if(!primeNum[i]) System.out.print(i+" ");
}
에라토스테네스의 체의 시간 복잡도는 O(n long long n )이다.
참고
'공부 > 알고리즘' 카테고리의 다른 글
플로이드 와샬(Floyd-Warshall) (0) | 2021.04.08 |
---|---|
위상정렬 (Topological Sort) (0) | 2021.04.04 |
유클리드 호제법 - 최소공약수, 최대공배수 (0) | 2021.04.04 |
다익스트라 알고리즘(Dijkstra Algorithm) (1) | 2021.04.03 |
Comments