By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.
What is the 10001st prime number?
Previously, we implemented the Sieve of Eratosthenes. However, our implementation demands an integer $m$ and can only generate primes less than $m$. While some approximation algorithms for determining the $n$th prime are available, we would like to produce an exact solution. Hence, we must implement a prime sieve that does not require an upper bound.
In [1]:
    
from itertools import count, islice
from collections import defaultdict
    
In [2]:
    
def _sieve_of_eratosthenes():
    factors = defaultdict(set)
    for n in count(2):
        if factors[n]:
            for m in factors.pop(n):
                factors[n+m].add(m)
        else:
            factors[n*n].add(n)
            yield n
    
In [3]:
    
list(islice(_sieve_of_eratosthenes(), 20))
    
    Out[3]:
In [4]:
    
get_prime = lambda n: next(islice(_sieve_of_eratosthenes(), n, n+1))
    
In [5]:
    
# The Project Euler problem
# uses the 1-based index.
get_prime(10001-1)
    
    Out[5]:
This implementation scales quite well, and has good space and time complexity.
In [6]:
    
get_prime(10**6)
    
    Out[6]: