에라토스테네스의 체
이름은 거창하지만 단순히 소수를 구하는 알고리즘이다.
구현 방법은 간단하다.
int A[] = new int[N+1];
for (int i = 2; i <= N; i++) {
A[i] = i;
}
for (int i = 2; i <= Math.sqrt(N); i++) { // 제곱근까지만 수행하기
if (A[i] == 0) {
continue;
}
// 배수 지우기
for (int j = i + i; j <= N; j = j + i) {
A[j] = 0;
}
}
A[i] != 0 , 즉 소수가 아닌 값을 표기
for (int i = 2 ; i <= N i++) {
if (A[i] != 0) {
System.out.print(A[i] + " ");
}
}
- Java Code
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int M = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
int A[] = new int[N + 1];
// 크기가 N + 1 인 배열을 선언한 후 값은 각각의 인덱스값으로 채운다.
// 1은 소수가 아니므로 2부터.
for (int i = 2; i <= N; i++) {
A[i] = i;
}
for (int i = 2; i <= Math.sqrt(N); i++) { // 제곱근까지만 수행하기
// 배수 지우기
for (int j = i + i; j <= N; j = j + i) {
A[j] = 0;
}
}
for (int i = M; i <= N; i++) {
if (A[i] != 0) {
sb.append(A[i]).append("\n");
}
}
System.out.println(sb);