본문 바로가기

문제풀이/백준 문제

BackJoon_1929 소수 구하기

import java.util.Scanner;

public class 소수구하기_1929 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int M = sc.nextInt();
        int N = sc.nextInt();

        // 0 ~ N 까지의 숫자의 소수 여부를 저장할 배열 생성
        boolean[] prime = new boolean[N + 1];

        prime[0] = prime[1] = true; // 0과 1은 소수가 아니므로 true로 초기회

        // 에라토스테네스의 체 알고리즘을 사용하여 소수 구하기
        // → 초기에 모든 수를 소수로 가정하고, 소수의 배수를 모두 제거하는 방식
        for(int i = 2; i <= Math.sqrt(prime.length); i++) { // 배열 길이의 제곱근까지가 소수를 판별하기 위한 최적의 범위
            for(int j = i * i; j < prime.length; j += i) { // 순차적으로 i 이외의 i의 배수를 제거
                prime[j] = true;
            }
            if(!prime[i]) {
                break;
            }
        }

        // prime 배열에서 M ~ N 까지의 소수 출력하기
        for(int i = M; i <= N; i++) {
            // false = 소수
            if(!prime[i]){
                System.out.println(i);
            }
        }

    }
}

https://www.acmicpc.net/problem/1929

'문제풀이 > 백준 문제' 카테고리의 다른 글

BackJoon_1476 날짜 계산  (0) 2023.09.02
BackJoon_2309 일곱 난쟁이  (0) 2023.09.01
BackJoon_1978 소수 찾기  (0) 2023.08.19
BackJoon_2609 최대공약수와 최소공배수  (0) 2023.08.18
BackJoon_17427 약수의 합2  (0) 2023.08.17