본문 바로가기

Java/백준

[JAVA] 백준 4948 베르트랑 공준

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

 

4948번: 베르트랑 공준

베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼

www.acmicpc.net

 

풀이 과정 

 

 

- 베르트랑 공준에 따르면 2이상의 자연수 n에 대하여 n<p<2n을 만족하는 소수 p가 반드시 존재함

- 에라토스테네스의 체를 이용하여 소수를 만났을 때 count 증가 

- .n이 소수일 때는 count에서 -1

 

 

정답 

 

import java.util.Scanner;

public class Main {
    
    public static void Eratosthenes(int arr[], int n)
    {
        
        for(int i=2; i<=n; i++)
        {
            arr[i] = i;
        }
        
        for(int i=2; i*i<=n; i++)
        {
            
            if(arr[i] ==0) continue;
            for(int j=i*2; j<=n; j+=i)
            {
                arr[j] = 0;
            }
        }
    }
    
    //소수 판별
    public static boolean isPrime(int n)
    {
    	if(n<2)
    		return false;
    	
    	for(int i=2; i<=Math.sqrt(n); i++)
    	{
    		if(n%i==0) return false; //나누어 떨어지면 소수 아님
    	}
    	return true;
    }
    
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        
        
        while(true)
        {
            int n = sc.nextInt();
            
            if(n==0)
                break;
            
            int arr[] = new int[n*2+1];
            int count=0; //소수 개수 
            Eratosthenes(arr,n*2);
            
            for(int i=n; i<=n*2; i++)
            {
                if(arr[i]!=0)
                {
                	
                    count++;
                }
            }
            
            if(isPrime(n)) //n이 소수라면 -1
            {
            	System.out.println(count-1);
            }
            else
            {
            	System.out.println(count);
            }
          
            
        }
    }
}

 

 

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

[JAVA] 백준 14425 문자열 집합  (0) 2024.02.12
[JAVA] 백준 17103 골드바흐 파티션  (0) 2024.02.10
[JAVA] 백준 1929 소수 구하기  (1) 2024.02.10
[JAVA] 백준 4134 다음 소수  (1) 2024.02.10
[JAVA] 백준 2485 가로수  (1) 2024.02.10