본문 바로가기

알고리즘

백준 1929번 소수 구하기

시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 256 MB 308290 93977 66101 28.367%

문제

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

출력

한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.

예제 입력 1 복사

3 16

예제 출력 1 복사

3
5
7
11
13

이 문제는 A부터B사이에 있는 소수를 구하는 문제 입니다.

 

2부터 시작하여 숫자의 배수를 지우는 식으로 풀수 있음니다

#include <bits/stdc++.h>
using namespace std;

int table[1000001];
int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    for(int i=1;i<=b;i++)
    {
        if(i!=1)
        table[i]=i;
    }
    for(int i=2;i<=b;i++)
    {
        if(table[i]!=0)
            for(int j=i+i;j<=b;j+=i)
            {
                table[j]=0;
            }
    }
    for(int i=a;i<=b;i++)
    {
        if(table[i])
            printf("%d\n", i);
    }

    return 0;
}