# Project Euler Solution 7: 10001st prime

This is part of the Project Euler series, this is about Problem 7: 10001st prime. It is about finding the 10001st prime, just as the title says.

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?

```def solution_generator() -> int:
return list(itertools.islice(prime_generator(), 10000, 10001))[0]
```

This takes 1.9 s to produce the correct answer of 104,743. This is way too long and there must be a more clever way to do this. And indeed there is, it is called the Sieve of Eratosthenes which lets you find prime numbers up to a ceiling pretty efficiently. Since I already know the solution I can just use that as the ceiling. Otherwise we would have to run the sieve a few times until we get to the 10001st prime.

```def prime_sieve(end: int) -> list[int]:
sieve = [True] * end
sieve[0] = False
sieve[1] = False
for i in range(end):
if sieve[i]:
for factor in itertools.count(2):
number = factor * i
if number >= len(sieve):
break
sieve[number] = False
primes = [number for number, state in enumerate(sieve) if state]
return primes

def solution_sieve() -> int:
primes = prime_sieve(110_000)
return primes[10000]
```

And this solution just takes 27 ms to compute, so that very likely is the intended answer.