본문 바로가기

스파르타 알고리즘 트랙 문제(백준)/2일차

스파르타 알고리즘 트랙 문제 2일차 - 2 #1929 소수 구하기

문제

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

해결 과정

1일차의 베르트랑 공준 문제와 비슷한 문제이다. 다른 점은, 입력이 2개를 받고 n -> 2n이 M -> N으로 변경되었고, 소수의 갯수를 출력에서 소수를 직접 출력으로 변경되었다.

 

베르트랑 공준 문제의 정답 코드를 가져와서 이 문제에 맞게 수정하였다.

import java.util.Scanner;

import static java.lang.Math.sqrt;

public class Main {
    public static void main(String[] args)   {



        int check = 0;
        Scanner a = new Scanner(System.in);
        int M = a.nextInt();
        int N = a.nextInt();
        for (int i=M;i<=N;i++){
            if (i == 1) continue;
            check = 0;
            for (int j = 2;j<=sqrt(i);j++){
                if (i%j==0){
                    check = 1;
                    break;}
            }
            if (check == 0){
                System.out.println(i);
        }


    }}}

다만 베르트랑 공준의 경우, n초과 2n 이하이기에 값이 1일 때를 신경쓰지 않아도 되었지만, 이 문제는 M이상 N이하 이기에 M이 1일 경우에도 소수인지 아닌지 확인하게 되었다. 따라서 1의 경우에는 소수인지 검사하지 않고 다음 숫자로 넘어가도록 조건을 추가해 주었다.

 

이전에 이미 한 번 해 보았던 문제이다 보니 큰 문제 없이 정답을 제출할 수 있었다.