Prime Number Algorithm

前端 未结 7 1957
梦如初夏
梦如初夏 2020-12-19 05:14

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         


        
7条回答
  •  不思量自难忘°
    2020-12-19 06:03

    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;
    }
    

提交回复
热议问题