Project Euler: Problem 7

Problem: What is the 10,001st prime number?

Q. How do we find the nth prime number?
A. Build a Sieve of Eratosthenes large enough to contain the nth prime number.

Q. What size must a sieve be to contain the nth prime number?
A. There is no known formula which would tell us the exact position of the nth prime number. However, there are numerous ways to estimate the number of primes below a given number (see Prime-counting function), with varying degrees of accuracy. For our purposes, we can use a simplified formula by assuming that at least 1% of numbers are prime, and therefore the nth prime number will occur by 100 x n (e.g. the 5th prime number will be less than 500).

Solution: Build a Sieve of Eratosthenes of size 10,001 * 100 = 1000100, generate a list of primes from the sieve and access the 10,000th element (since arrays start at zero). We already have a function for generating prime numbers up to n from our solution to problem 3.

<?php

declare(strict_types=1);
error_reporting(E_ALL);

require_once __DIR__ . '/../primes.php';

$prime_count_target = 10001;

// Assume at least 1 prime per 100 numbers
$max_prime_candidate = $prime_count_target * 100;

$primes = prime_numbers($max_prime_candidate);

print($primes[$prime_count_target - 1] . "\n");

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.