에라토스테네스의 체를 가지고 푸는 문제입니다.
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;
}