Return all prime numbers smaller than M

后端 未结 9 2089
梦谈多话
梦谈多话 2021-01-02 14:46

Given an integer M. return all prime numbers smaller than M.

Give a algorithm as good as you can. Need to consider time and space complexity.

相关标签:
9条回答
  • 2021-01-02 15:47

    i'm a novice programmer in c# (and new to S.O.), so this may be a bit verbose. nevertheless, i've tested this, and i works.

    this is what i've come up with:

    for (int i = 2; i <= n; i++)
    {
        while (n % i == 0)
        {
            Console.WriteLine(i.ToString());
            n /= i;
        }
    }
    Console.ReadLine();
    
    0 讨论(0)
  • 2021-01-02 15:51

    You can do it using a bottom up dynamic programming approach called the Sieve of Eratosthenes Basically you create a boolean cache of all numbers upto n and you mark each the multiples of each number as not_prime. Further optimizations can be gained by checking only upto sqrt(n) since any composite number will have at least one divisor less that sqrt(n)

        public int countPrimes(int n) {
        if(n==0){
            return 0;
        }else{
            boolean[] isPrime=new boolean[n];
            for(int i=2;i<n;i++){
                isPrime[i]=true;
            }
    
            /* Using i*i<n instead of i<Math.sqrt(n)
             to avoid the exepnsive sqrt operation */
            for(int i=2;i*i<n;i++){
               if(!isPrime[i]){
                   continue;
               }
                for(int j=i*i;j<n;j+=i){
                    isPrime[j]=false;
                }
            }
    
            int counter=0;
            for(int i=2;i<n;i++){
                if(isPrime[i]){
                    counter++;
                }
            }
    
            return counter;
    
        }
    }
    
    0 讨论(0)
  • 2021-01-02 15:53

    The Sieve of Atkin is also the best algorithm to implement in this case and it takes only O(N) operations and O(N) space. Please refer https://en.wikipedia.org/wiki/Sieve_of_Atkin for detailed explanation of the algorithm and pseudocode.

    0 讨论(0)
提交回复
热议问题