Can anyone tell me how to implement Sieve of Eratosthenes algorithm in C? I need to generate prime numbers but my algorithm is slow.
My code:
#inclu
Toomtarm Kung' answer is great, thank's a lot.
There's however still one caveat I stumbled upon: (i*i) may overflow for i>46340 on 32 bit and i>3037000499 on 64-bits, producing incorrect results, i.e. 2147483647 will not be recognised as a prime when using 32-bit integers.
To avoid the integer overflow, one can replace (i * i)<=number by i <= number / i
Now, to avoid a double division, the code may be written as follows:
int isPrime(int number){
if(number < 2) return 0;
if(number == 2) return 1;
if(number % 2 == 0) return 0;
int j;
for(int i=3; ((j=number/i) >= i); i+=2){
if(number - (j * i) == 0 ) return 0;
}
return 1;
}