From 28e4842319daeb300c571a867ed4d29244987f4d Mon Sep 17 00:00:00 2001 From: Kaushal Agrawal Date: Thu, 13 Sep 2018 05:57:56 +0530 Subject: [PATCH] Update sieve_of_Eratosthenes.cpp Multiple changes: Time complexity updated. Fixed Indentation issues. Global array primes[ ] was misleading because primes[x] = 0 means x is prime. Updated the array name to isprime[ ] and now isprime[x] = 1 means x is prime. Updated the code accordingly. --- sieve_of_Eratosthenes.cpp | 55 +++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 28 deletions(-) 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