📟java/백준

백준 4948 자바

하얀성 2022. 11. 16. 22:04

문제

베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다.

이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼프가 1850년에 증명했다.

예를 들어, 10보다 크고, 20보다 작거나 같은 소수는 4개가 있다. (11, 13, 17, 19) 또, 14보다 크고, 28보다 작거나 같은 소수는 3개가 있다. (17,19, 23)

자연수 n이 주어졌을 때, n보다 크고, 2n보다 작거나 같은 소수의 개수를 구하는 프로그램을 작성하시오. 

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 케이스는 n을 포함하는 한 줄로 이루어져 있다.

입력의 마지막에는 0이 주어진다.

출력

각 테스트 케이스에 대해서, n보다 크고, 2n보다 작거나 같은 소수의 개수를 출력한다.

 

제한

  • 1 ≤ n ≤ 123,456

<정답>

부끄럽지만 문제 이해가 안되서 정답으로 바로 달렸다. 

위 에라토스테네스의 체를 이용하여 boolean 배열로 소수인 경우는 false, 소수가 아닌경우는 true 를 담고 있도록 할 것이다.

 

그리고 입력 N 이 주어지면 해당 배열에서 index 가 N ~ 2N 까지 순회하면서 false 의 개수를 세어주면 된다.

 

에라토스테네스... 밑의 글을 참고하자.. 읽어봤는데 몹시 흥미롭다. (흥미롭긴 한데.. 코드로 쥐어짜다간 머리가 터질것만 같다. 그래도 시간복잡도 개념을 이렇게 응용하는 것을 보게되어 좋았다.

 

정보처리기사 시험때만해도 시간복잡도 공식만 있지... 짜본적이 없어서 와닿지 않았는데... 지난 소수 문제 때... 루트N과 O(N) 의 시간 복잡도로는 짜보고 경험해봤기 때문에 조금은 와닿는다고나 할까?

https://st-lab.tistory.com/81?category=830901 

 

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

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

st-lab.tistory.com

 

 

import java.util.Scanner;
 
public class Main {
/*
n > 123456 이므로 2n 은 최대 246912 이다.
0 부터 시작하므로 246912 + 1
*/
public static boolean[] prime = new boolean[246913];
    
public static void main(String[] args) {
 
Scanner in = new Scanner(System.in);
        
get_prime(); // 소수를 얻는 메소드 실행

while(true) {
int n = in.nextInt();
if(n == 0) break; // n 이 0 일경우 종료
            
int count = 0; // 소수 개수를 셀 변수
            
for(int i = n + 1; i <= 2 * n; i++) {
if(!prime[i]) count++;
}
System.out.println(count);
}
}

// 소수를 얻는 메소드
public static void get_prime() {
// 0 과 1 은 소수가 아니므로 ture
prime[0] = prime[1] = true;

for(int i = 2; i <= Math.sqrt(prime.length); i++) {
if(prime[i]) continue;
for(int j = i * i; j < prime.length; j += i) {
prime[j] = true;
}
}
}
 
}

 

-> 코드를 자세히 살펴보면 의외로 간단하다. 그런데 스스로 코드 짜는 건 힘들어 보인다... ㅎㅎ;

 

정답 및 풀이 출처: https://st-lab.tistory.com/85

'📟java > 백준' 카테고리의 다른 글

백준 2563 자바  (1) 2022.11.17
백준 2738 자바  (0) 2022.11.16
백준 11653 자바  (0) 2022.11.15
백준 1978 자바  (0) 2022.11.15
백준 2839 자바  (0) 2022.11.14