코딩 테스트

[백준] 1929번 소수 구하기

한 면만 쓴 종이 2023. 1. 19. 13:21

 

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

 

입력:

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

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

 


 

음 이 문제는 저번주에 풀었던 1979번이랑 비슷한 문제 같다!

그럼 이번에도 sqrt를 사용해야겠다.

 

 

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

public class B1929 {  //소수 구하기
    public static void main(String[] args) throws IOException {

        // 입력받기
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());

        //소수 판별
        for(int i = 0; i <= b-a; i++) {
            if(is_prime(a + i)) System.out.println(a + i);
        }
    }

    public static boolean is_prime(int a) {
        if (a == 1) return false;
        else if (a == 2) return true;
        for (int i = 2; i <= Math.sqrt(a); i++)
            if (a % i == 0) return false;
        return true;
    }
}

이렇게 풀어서 맞췄다!

 

근데 더 좋은 방법이 있을까 하여 검색해 보았더니 이 문제는 에라토스테네스의 체를 쓰는 문제라고 한다.

 

이 방법이 더 효율이 좋다고해서 이 방법으로도 풀어봐야겠다.

 

 

JAVA [자바] - 소수 구하는 알고리즘 및 구현 (tistory.com)

 

JAVA [자바] - 소수 구하는 알고리즘 및 구현

들어가기 전에 소수 [Prime Number] 소수의 정의는 1보다 큰 자연수 중 1 과 그 수 자기 자신만을 약수로 갖는 자연수를 의미한다는 점은 누구나 알고 있을 것이다. 즉, 소수의 약수는 2개만을 갖고,

st-lab.tistory.com

이 글을 참고해서 풀었다!