
백준 1929번
https://www.acmicpc.net/problem/1929
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
초기 상태 (M = 3, N = 16)

i = 2 일 경우

i = 3 일 경우

M = 3 부터 N = 16 까지 FALSE 값이 소수인 값이다.
- [3, 5, 7, 11, 13]
import java.util.*;
import java.io.*;
public class Main {
static boolean[] isPrime;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int M = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
// 소수 판단 boolean 배열
isPrime = new boolean[N + 1];
StringBuilder sb = new StringBuilder();
getPrime(); // 소수 확인 메서드
for (int i = M; i <= N; i++) {
// false인 경우 소수이다.
if (!isPrime[i]) {
sb.append(i).append("\n");
}
}
System.out.println(sb);
}
public static void getPrime() {
// 0과 1은 소수가 아니므로 true
isPrime[0] = isPrime[1] = true;
for (int i = 2; i <= Math.sqrt(isPrime.length); i++) {
// 이미 소수 판단 후 아닌 경우
if (isPrime[i]) {
continue;
}
for (int j = i * i; j < isPrime.length; j += i) {
isPrime[j] = true;
}
}
}
}