TheAlgorithms-C-Plus-Plus/math/sieve_of_eratosthenes.cpp

70 lines
1.1 KiB
C++
Raw Normal View History

2017-10-09 09:34:50 +08:00
/*
* Sieve of Eratosthenes is an algorithm to find the primes
* that is between 2 to N (as defined in main).
*
* Time Complexity : O(N * log N)
2017-10-09 09:34:50 +08:00
* Space Complexity : O(N)
*/
#include <iostream>
using namespace std;
#define MAX 10000000
int isprime[MAX];
2017-10-09 09:34:50 +08:00
/*
* This is the function that finds the primes and eliminates
* the multiples.
*/
2019-08-21 10:10:08 +08:00
void sieve(int N)
{
isprime[0] = 0;
isprime[1] = 0;
2019-08-21 10:10:08 +08:00
for (int i = 2; i <= N; i++)
{
if (isprime[i])
{
for (int j = i * 2; j <= N; j += i)
{
isprime[j] = 0;
}
}
2017-10-09 09:34:50 +08:00
}
}
/*
* This function prints out the primes to STDOUT
*/
2019-08-21 10:10:08 +08:00
void print(int N)
{
for (int i = 1; i <= N; i++)
{
if (isprime[i] == 1)
{
cout << i << ' ';
}
}
cout << '\n';
2017-10-09 09:34:50 +08:00
}
/*
* NOTE: This function is important for the
* initialization of the array.
*/
2019-08-21 10:10:08 +08:00
void init()
{
for (int i = 1; i < MAX; i++)
{
isprime[i] = 1;
}
2017-10-09 09:34:50 +08:00
}
2019-08-21 10:10:08 +08:00
int main()
{
int N = 100;
init();
sieve(N);
print(N);
2017-10-09 09:34:50 +08:00
}