[백준_1929] 소수 구하기

MyungHwan Kim·2022년 9월 17일

백준

목록 보기
32/39
post-thumbnail

문제

백준 1929번
https://www.acmicpc.net/problem/1929

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.

Code

  • 초기 상태 (M = 3, N = 16)

  • i = 2 일 경우

  • i = 3 일 경우

  • M = 3 부터 N = 16 까지 FALSE 값이 소수인 값이다.

    • [3, 5, 7, 11, 13]

Java

import java.util.*;
import java.io.*;

public class Main {
    static boolean[] isPrime;
    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());
        // 소수 판단 boolean 배열
        isPrime = new boolean[N + 1];
        StringBuilder sb = new StringBuilder();
        getPrime();  // 소수 확인 메서드

        for (int i = M; i <= N; i++) {
            // false인 경우 소수이다.
            if (!isPrime[i]) {
                sb.append(i).append("\n");
            }
        }
        System.out.println(sb);
    }

    public static void getPrime() {
        // 0과 1은 소수가 아니므로 true
        isPrime[0] = isPrime[1] = true;

        for (int i = 2; i <= Math.sqrt(isPrime.length); i++) {
            // 이미 소수 판단 후 아닌 경우
            if (isPrime[i]) {
                continue;
            }
            for (int j = i * i; j < isPrime.length; j += i) {
                isPrime[j] = true;
            }
        }
    }
}
profile
Back-end 개발자가 되기 위한 개발 노트(Java)

0개의 댓글