문제

내 풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
boolean[] sosu = new boolean[1000000];
sosu[0] = false;
sosu[1] = false;
for(int i = 2; i < sosu.length; i++) {
sosu[i] = true;
}
for(int i = 2; i < sosu.length; i++) {
if(sosu[i]) {
for(int j = 2*i; j < sosu.length; j += i) {
sosu[j] = false;
}
}
}
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
for(int i = a; i <= b; i++) {
if(sosu[i]) {
System.out.println(i);
}
}
sc.close();
}
}
에라토스테네스의 체 알고리즘
- 임의의 자연수 n에 대해 그 이하의 소수를 찾는 가장 간단하고 빠른 방법
- 2부터 소수를 구하고자 하는 구간의 모든 수를 나열
- 2는 소수
- 자기 자신을 제외한 2의 배수를 모두 지움
- 남아있는 수 가운데 3은 소수
- 자기 자신을 제외한 3의 배수를 모두 지움
- 남아있는 수 가운데 5는 소수
- 자기 자신을 제외한 5의 배수를 모두 지움
- 남아있는 수 가운데 7은 소수
- 자기 자신을 제외한 7의 배수를 모두 지움
- 위의 과정을 반복하면 구하는 구간의 모든 소수가 남는다.