Sieve of Eratosthenes algorithm

后端 未结 14 1191
一生所求
一生所求 2020-12-15 12:55

I am currently reading \"Programming: Principles and Practice Using C++\", in Chapter 4 there is an exercise in which:

I need to mak

14条回答
  •  温柔的废话
    2020-12-15 13:17

    In the code fragment below, the numbers are filtered before they are inserted into the vector. The divisors come from the vector.

    I'm also passing the vector by reference. This means that the huge vector won't be copied from the function to the caller. (Large chunks of memory take long times to copy)

    vector primes;
    
    void calc_primes(vector& primes, const unsigned int MAX)
    {
        // If MAX is less than 2, return an empty vector
        // because 2 is the first prime and can't be placed in the vector.
        if (MAX < 2)
        {
             return;
        }
    
        // 2 is the initial and unusual prime, so enter it without calculations.
        primes.push_back(2);
        for (unsigned int number = 3; number < MAX; number += 2)
        {
            bool is_prime = true;
            for (unsigned int index = 0; index < primes.size(); ++index)
            {
                if ((number % primes[k]) == 0)
                {
                    is_prime = false;
                    break;
                }
            }
    
            if (is_prime)
            {
                primes.push_back(number);
            }
        }    
    }
    

    This not the most efficient algorithm, but it follows the Sieve algorithm.

提交回复
热议问题