문제 출처: https://www.acmicpc.net/problem/1929



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
 
public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] arr = reader.readLine().split(" ");
        int M = Integer.parseInt(arr[0]);
        int N = Integer.parseInt(arr[1]);
        StringBuilder builder = new StringBuilder();
 
        // 모든 자연수는 소수들의 곱으로 표현이 되기 때문에, 
        // 2부터 N-1까지의 수 중에서 2의 배수를 모두 체로 거르고 남은 숫자들 중에서 3의 배수로 거르고를 반복해 
        // sqrt(N)까지 나눠서 남은 걸러지지 않고 남은 수들이 모두 소수가 된다. 
        // 출처: http://ledgku.tistory.com/61 [견우와 직녀]
        boolean[] isPrimeArr = new boolean[N+1];
        Arrays.fill(isPrimeArr, true);
        isPrimeArr[0= false;
        isPrimeArr[1= false;
        
        for(int i=; i<=(int)Math.sqrt(N) ; ++i) {
            if (isPrimeArr[i]){
                for (int j=i+i; j<=N; j+=i)
                    isPrimeArr[j] = false;
            }
        }
        
        for(int i=M ; i<=N ; i++){
            if(isPrimeArr[i])
                builder.append(i).append("\n");
        }
        
        System.out.println(builder);
    }
}
cs


'Algorithm' 카테고리의 다른 글

백준 9020번: 골드바흐의 추측  (0) 2018.10.21
백준 4948번: 베르트랑 공준  (0) 2018.10.21
백준 2581번: 소수  (0) 2018.10.21
백준 1978번: 소수 찾기  (0) 2018.10.21
백준 1181번: 단어 정렬  (0) 2018.10.20

+ Recent posts