백준 1929번: 소수구하기

Se0ng_1l·2022년 6월 24일
0

백준

목록 보기
9/40

코드 보시기 전에 시간초과는

입출력을 C언어 방식으로 해보세요.

에라토스테네스의 체를 가지고 푸는 문제입니다.
0과 1을 제외한 2부터 시작하여 배열안에 2의 배수들을 전부 지우고
그 다음 3, 그 다음은 4.... 이렇게 지원나가면 소수들의 배수가 전부 지워지기 때문에 소수만 들어있는 배열만 구할 수 있습니다.

#include <iostream>
using namespace std;

void Eratos(bool *arr, int size)
{
    for(int i = 2; i < size; i++)
    {
        if(!arr[i])
            continue;
        for(int j = 2; j < size; j++)
        {
            if(i * j > size)
                break;
            if(arr[i * j])
                arr[i * j] = false;
        }
    }
}
int main()
{
    int a, b;
    cin >> a >> b;
    bool *arr = new bool[b+1];
    for(int i = 0; i <= b; i++)
    {
        if(i == 1)
            arr[i] = false;
        else
            arr[i] = true;
    }
    Eratos(arr, b);

    for(int i = a; i <= b; i++)
        if(arr[i])
            printf("%d\n", i);
    delete [] arr;
}
profile
치타가 되고 싶은 취준생

0개의 댓글