Algorithm/백준
[백준] 1929번 소수 구하기
sirius
2021. 2. 25. 10:13
https://www.acmicpc.net/problem/1929
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
www.acmicpc.net
주어진 수의 범위 내의 모든 소수 구하기
에라토스테네스의 체 알고리즘을 이용
미리 범위만큼의 boolean 배열을 생성하여 소수가 아닌 것은 false로 변경
어떤 수의 배수는 소수가 아니므로 모두 제거
0 과 1은 소수가 아니므로 제외
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
boolean[] arr = new boolean[b + 1];
Arrays.fill(arr, true);
for(int i = 2; i<=Math.sqrt(b); i++ ) {
if(arr[i]){
int j = 2;
while(i * j <= b) {
arr[i * j] = false;
j++;
}
}
}
arr[0] = false;
arr[1] = false;
for(int i = a; i <= b; i++) {
if(arr[i]) {
System.out.println(i);
}
}
}
}