We can write a function that finds all the prime numbers less than \texttt{n} using the sieve of Eratosthenes:

Start
    Put numbers from 2 to n in a sieve (array)
    Repeat
        Select and remove from the sieve the smallest integer
        this integer is prime
        Remove its multiples
    Until sieve is empty
End

void primeN(int Prime[], int N)
{
    int Prime[Nmax], Status[Nmax], i, j, k, L, m, end;
    i=2;
    while(i<N)
    {
        Status[i]=1;
        i++;
    }

    k=1;
    Prime[k]=1;
    end=0;
    i=2;
    while(i<=N && end==0)
    {
        // find the smallest
        j=i;
        while(j<=N && Status[j]==0)
            j=j+1;
        if(j<=N)
        {
            //Save the prime number
            k=k+1;
            Prime[k]=j;
            L=1;
            m=L*j;
            //remove its multiples
            while(m<=N)
            {
                Status[m]=0;
                L++;
                m=L*j;
            }
            i=j+1;
        }
        else
            end=1;
    }
}

Study the complexity of the above function.

Hint: \(\sum_{p \leq n, p\ prime} \frac{1}{p} \in O(\log(\log n))\)


Difficulty level
This exercise is mostly suitable for students
O(N*log(log(N)))

Back to the list of exercises
Looking for a more challenging exercise, try this one !!
Sorting using merge-sort algorithm