알고리즘/문제 풀이

백준 4948 - 베르트랑 공준

qqlzzb 2022. 6. 4. 21:32

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

 

4948번: 베르트랑 공준

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

www.acmicpc.net

 

풀이

 

소수 찾는 문제는 에라토스테네스의 체를 항상 사용하는 듯 하다.

1부터 2n 까지의 소수를 찾는 게 아니라, n부터 2n까지의 소수를 찾는 문제라서 일단 처음부터 찾아준 후에,

n부터 몇개인지 count 했다.

 

에라토스테네스의 체는 2부터 소수를 찾아서 자기 자신을 제외한 배수들을 모두 지워서 소수를 찾아내는 방식이다. 

 

코드

#include <iostream>
using namespace std;

bool arr[123456*2];

int main()
{
    while(1)
    {
        int n;
        cin>>n;
        if(n==0) break;

        for(int i=0; i<=2*n; i++)
        {
            arr[i]=0;
        }

        int cnt=0;
        for(int i=2; i<=2*n; i++)
        {
            if(arr[i]==0) arr[i]=0;
            for(int j=i+i; j<=2*n; j+=i)
            {
                if(arr[j]!=1) arr[j]=1;
            }
        }
        for(int i=n+1; i<=2*n; i++)
        {
            if(arr[i]==0) cnt++;
        }
        cout<<cnt<<'\n';
    }
}

'알고리즘 > 문제 풀이' 카테고리의 다른 글

백준 1269 - 대칭 차집합  (0) 2022.06.07
백준 9613 - GCD 합  (0) 2022.06.05
백준 17413 - 단어 뒤집기  (0) 2022.06.03
백준 1213 - 팰린드롬 만들기(C++)  (0) 2022.06.02
백준 4673 - 셀프 넘버  (0) 2022.03.29