에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 수학에서 에라토스테네스의 체는 소수를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2부터 소수를 구하고자 하는 구간
ko.wikipedia.org
소수구하기 이론의 기본이 되는 알고리즘이다.
위키백과에 너무 설명이 잘 되어 있다.
자바 소스 코드는 다음과 같다.
public class Eratos {
public static void main(String[] args) {
// ArrayList로 구현
ArrayList<Boolean> primeList;
// 사용자로부터의 콘솔 입력
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
// n <= 1 일 때 종료
if(n <= 1) return;
// n+1만큼 할당
primeList = new ArrayList<Boolean>(n+1);
// 0번째와 1번째를 소수 아님으로 처리
primeList.add(false);
primeList.add(false);
// 2~ n까지 소수로 설정
for(int i=2; i<=n; i++ )
primeList.add(i, true);
// 2부터 ~ i*i <= n
// 각각의 배수들을 지워간다.
for(int i=2; (i*i)<=n; i++){
if(primeList.get(i)){
for(int j = i*i; j<=n; j+=i) primeList.set(j, false);
//i*i 미만은 이미 처리되었으므로 j의 시작값은 i*i로 최적화할 수 있다.
}
}
StringBuffer sb = new StringBuffer();
sb.append("{");
for(int i=0; i<=n; i++){
if(primeList.get(i) == true){
sb.append(i);
sb.append(",");
}
}
sb.setCharAt(sb.length()-1, '}');
System.out.println(sb.toString());
}
}
IntelliJ 에서 실제 동작을 디버깅해보면, 이론과 완전히 동일함을 확인할 수 있다.
'알고리즘 > 이론' 카테고리의 다른 글
DP (Dynamic Programming, 동적계획법) (0) | 2023.02.25 |
---|---|
Divide & Conquer 1 학습기록 (0) | 2023.01.30 |
quick sort (0) | 2022.10.27 |
합병정렬 merge sort (0) | 2022.10.26 |
[기본적인 정렬 : selection, bubble, insertion sort] (0) | 2022.10.25 |