[백준] 수학 1929번: 소수 구하기

C.K. ·2022년 7월 5일
0

baekjoon

목록 보기
46/67

문제

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

입력

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

출력

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

Approach

사용 알고리즘: 에라토스테네스의 체

  • 2부터 n까지 배열에 저장
  • 2부터 시작해서 배수를 계속 지움
  • 소수만 남겨놓은 상태에서 m부터 n까지 출력

Source Code

#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <string>
#include <sstream>
using namespace std;



int main()
{
    ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
    
    int m, n;
    cin >> m >> n;
    
    int prime[1000001];
    
    // 배열에 2부터 n까지 저장
    for (int i = 2; i <= n; i++)
    {
        prime[i] = i;
    }
    
    // 2부터 배수 지우기 시작
    for (int i = 2; i <= n; i++)
    {
    	// 이미 지워진 수면 pass
        if (prime[i] == 0)
            continue;
        
        else
        {
        	// 배수지우기
            for (int j = 2 * i; j <= n; j += i)
            {
                prime[j] = 0;
            }
        }
    }
    
    // m부터 n까지의 소수 출력
    for (int k = m; k <= n; k++)
    {
        if (prime[k] != 0)
            cout << prime[k] << '\n';
    }
    
    
    return 0;
}
profile
1일 1알고리즘

0개의 댓글