에라토스테네스의 체는 n이 약 1천만보다 작을 때 n보다 작은 소수를 찾는 가장 효율적인 방법 중 하나입니다.
에라토스테네스의 체를 보여주는 프로그램은 다음과 같습니다.
예시
#include <bits/stdc++.h>
using namespace std;
void SieveOfEratosthenes(int num) {
bool pno[num+1];
memset(pno, true, sizeof(pno));
for (int i = 2; i*i< = num; i++) {
if (pno[i] == true) {
for (int j = i*2; j< = num; j + = i)
pno[j] = false;
}
}
for (int i = 2; i< = num; i++)
if (pno[i])
cout << i << " ";
}
int main() {
int num = 15;
cout << "The prime numbers smaller or equal to "<< num <<" are: ";
SieveOfEratosthenes(num);
return 0;
} 출력
위 프로그램의 출력은 다음과 같습니다.
The prime numbers smaller or equal to 15 are: 2 3 5 7 11 13
이제 위의 프로그램을 이해해보자.
SieveOfEratosthenes() 함수는 인수로 제공되는 num 앞에 나오는 모든 소수를 찾습니다. 이에 대한 코드 스니펫은 다음과 같습니다.
void SieveOfEratosthenes(int num) {
bool pno[num+1];
memset(pno, true, sizeof(pno));
for (int i = 2; i*i< = num; i++) {
if (pno[i] == true) {
for (int j = i*2; j< = num; j + = i)
pno[j] = false;
}
}
for (int i = 2; i< = num; i++)
if (pno[i])
cout << i << " ";
} main() 함수는 num의 값을 설정한 다음 num보다 작거나 같은 모든 소수를 인쇄합니다. 이것은 SieveOfEratosthenes() 함수를 호출하여 수행됩니다. 이에 대한 코드 스니펫은 다음과 같습니다.
int main() {
int num = 15;
cout << "The prime numbers smaller or equal to "<< num <<" are: ";
SieveOfEratosthenes(num);
return 0;
}