# Euler Problem 7¶

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 10 001st prime number?

We reuse our prime functions and use a trick from stackoverflow to get the nth element.

In [7]:

    import itertools

    def is_prime(n, smaller_primes):
        for s in smaller_primes:
            if n % s == 0:
                return False
            if s * s > n:
                return True
        return True

    def prime_generator_function():
        primes = [2, 3, 5, 7]
        for p in primes:
            yield p
        while True:
            p += 2
            if is_prime(p, primes):
                primes.append(p)
                yield p

    def get_nth_prime(n):
        ps = prime_generator_function()
        return next(itertools.islice(ps, n - 1, n))

    assert(get_nth_prime(6) == 13)
    print(get_nth_prime(10001))

    104743