백준/백준 단계별 문제풀이

백준 4948번 (C++)

FDEE 2020. 8. 30. 01:25

www.acmicpc.net/problem/4948

 

4948번: 베르트랑 공준

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

www.acmicpc.net

 

<답안>

#include <iostream>
using namespace std;
int main()
{
    int n;
    int count = 0;
    int array[246913];
    array[1] = -1;
    
    cin>>n;
    while(n != 0)
    {
        for(int i=2; i<=2*n; i++)
        {
            for(int j=2; i*j<=2*n; j++)
                array[i*j] = -1;
        }
        for(int i=n+1; i<=2*n; i++)
        {
            if(array[i] != -1)
                count++;
            array[i] = 0;
        }
        cout<<count<<"\n";
        count = 0;
        
        cin>>n;
    }
    return 0;
}

 

<설명>

앞전문제에 사용되었던 "에라토스테네스의 체" 알고리즘을 사용하여

입력된 n의 2배수까지 소수를 비교한 뒤,

소수가 아닌경우 (array[i] != -1) 개수를 증가시켰다

 

다음번 반복을 위해 count 증가 후 array[i]를 0으로 초기화 한다

최종적으로 count를 출력시킨다

 

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

백준 1085번 (C++)  (0) 2020.08.30
백준 9020번 (C++)  (0) 2020.08.30
백준 1929번 (C++)  (0) 2020.08.29
백준 2581번 (C++)  (0) 2020.08.28
백준 1978번 (C++)  (0) 2020.08.28