M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
사용 알고리즘: 에라토스테네스의 체
- 2부터 n까지 배열에 저장
- 2부터 시작해서 배수를 계속 지움
- 소수만 남겨놓은 상태에서 m부터 n까지 출력
#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;
}