diff --git a/sieve_of_Eratosthenes.cpp b/sieve_of_Eratosthenes.cpp index e20aec6ae..30fd369ea 100644 --- a/sieve_of_Eratosthenes.cpp +++ b/sieve_of_Eratosthenes.cpp @@ -2,7 +2,7 @@ * Sieve of Eratosthenes is an algorithm to find the primes * that is between 2 to N (as defined in main). * - * Time Complexity : O(N) + * Time Complexity : O(N * log N) * Space Complexity : O(N) */ @@ -11,50 +11,49 @@ using namespace std; #define MAX 10000000 -int primes[MAX]; - +int isprime[MAX]; /* * This is the function that finds the primes and eliminates * the multiples. */ -void sieve(int N) -{ - primes[0] = 1; - primes[1] = 1; - for(int i=2;i<=N;i++) - { - if(primes[i] == 1) continue; - for(int j=i+i;j<=N;j+=i) - primes[j] = 1; +void sieve(int N) { + isprime[0] = 0; + isprime[1] = 0; + for (int i = 2; i <= N; i++) { + if (isprime[i]) { + for (int j = i * 2; j <= N; j += i) { + isprime[j] = 0; + } + } } } /* * This function prints out the primes to STDOUT */ -void print(int N) -{ - for(int i=0;i<=N;i++) - if(primes[i] == 0) - cout << i << ' '; - cout << '\n'; +void print(int N) { + for (int i = 1; i <= N; i++) { + if (isprime[i] == 1) { + cout << i << ' '; + } + } + cout << '\n'; } /* * NOTE: This function is important for the * initialization of the array. */ -void init() -{ - for(int i=0;i