백준 1929 소수 구하기 (Java,자바)

jonghyukLee·2023년 3월 5일

이번에 풀어본 문제는
백준 1929번 소수 구하기 입니다.

📕 문제 링크

❗️코드

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

public class Main {
    static int M, N;
    static boolean [] notPrime;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        M = Integer.parseInt(st.nextToken());
        N = Integer.parseInt(st.nextToken());

        notPrime = new boolean [N + 1];

        // 2보다 작으면 끝
        if (N < 2) {
            return;
        }

        notPrime[1] = true;

        makePrimes();

        StringBuilder sb = new StringBuilder();
        for (int i = M; i <= N; i++) {
            if (!notPrime[i]) {
                sb.append(i).append("\n");
            }
        }
        sb.deleteCharAt(sb.length() - 1);
        System.out.print(sb);
    }

    static void makePrimes() {
        for (int i = 2; i * i <= N; i++) {
            if (!notPrime[i]) {
                for (int j = i * i; j <= N; j += i) {
                    notPrime[j] = true;
                }
            }
        }
    }
}

📝 풀이

M이상 N이하의 소수를 모두 출력하는 문제입니다.
소수를 미리 분류해놓고, 범위에 맞는 값만 출력하면 간단하게 해결할 수 있습니다.

profile
머무르지 않기!

0개의 댓글