
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
for( int i = m ; i < n; i++) { ... }
int j = 2;
while(j < i){
if(i%j ==0) break;
else j++;
}
if(j==i)
System.out.println(i);
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int m = sc.nextInt(); int n = sc.nextInt();
for( int i = m ; i < n; i++){
int j = 2;
while(j < i){
if(i%j ==0) break;
else j++;
}
if(j==i)
System.out.println(i);
}
}
}
❌ BUT 위 코드는 시간 초과로 실패 ❌

분류에 적힌 <에라토스테네스의 체> 알고리즘으로 풀기로 했다.
에라토스테네스의 체는 대량의 소수를 한 번에, 빠르게 판별할 수 있는 알고리즘이다.
원리
- 찾고자 하는 범위만큼 배열을 할당하고 값을 넣는다.
- 2부터 n까지 배수에 해당하는 값을 지운다. (대신 0을 삽입)
- 남은 수를 출력한다.
아래 블로그에 자세히 설명되어 있다.
🔗 알고리즘 - 에라토스테네스의 체
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());
...
}
int[] arr = new int[n+1];
for( int i = 2; i<=n; i++){
arr[i] = i;
}
for (int i = 2; i<=n; i++){
if(arr[i] == 0) continue;
for (int j = i+i; j <= n; j += i) {
arr[j] = 0;
}
}
StringBuilder sb = new StringBuilder();
for(int i = m; i<=n; i++){
if(arr[i] != 0) sb.append(arr[i] + "\n");
}
System.out.println(sb);
import java.io.*;
import java.util.StringTokenizer;
public class Main {
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());
int[] arr = new int[n+1];
for( int i = 2; i<=n; i++){
arr[i] = i;
}
for (int i = 2; i<=n; i++){
if(arr[i] == 0) continue;
for (int j = i+i; j <= n; j += i) {
arr[j] = 0;
}
}
StringBuilder sb = new StringBuilder();
for(int i = m; i<=n; i++){
if(arr[i] != 0) sb.append(arr[i] + "\n");
}
System.out.println(sb);
}
}