백준 1929번 : 소수 구하기

반응형

백준 1929번 : 소수 구하기

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    public void solution() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int min = Integer.parseInt(st.nextToken());
        int max = Integer.parseInt(st.nextToken());
        Boolean[] booleans = new Boolean[max+1];
        setPrimeNumber(booleans);
        for(int i=min; i<=max; i++){
            if(booleans[i]!=true) System.out.println(i);
        }
    }

    public void setPrimeNumber(Boolean[] booleans){
        Arrays.fill(booleans, false);
        booleans[0] = booleans[1] = true;
        for(int i=2; i<Math.sqrt(booleans.length); i++){
            if(booleans[i]) continue;
            for(int j=i*i; j<booleans.length; j+=i){
                booleans[j] = true;
            }
        }
    }
    public static void main(String args[]) throws IOException {
        new Main().solution();
    }
}

처음에 주어진 범위대로 소수를 초기화 해놓고(에라토스테네스의 체) 주어진 범위의 소수를 for문으로 찾아서 출력한다.

백준 1978번 : 소수찾기 (https://www.acmicpc.net/problem/1978) 에서 풀었던 내용에서 에라토스테네스의 체 부분을 약간 수정 해준 후 단순 출력으로 해결했다. 나보다 월등히 빠른 사람들이 있던데 코드가 궁금하다. 추후 추가 포스팅 진행 할 

예정이다.

반응형