Question:
https://projecteuler.net/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?
思路可以参考 wikipedia - Sieve of Eratosthenes
Solution:
public static long nthPrimeNumber(int n) {
long[] primes = new long[n];
primes[0] = 2;
primes[1] = 3;
primes[2] = 5;
primes[3] = 7;
primes[4] = 11;
primes[5] = 13;
int i = 6;
for (long x = primes[i-1] + 2; i < n; x += 2) {
if(isPrime(x, primes)) primes[i++] = x;
}
return primes[n - 1];
}
private static boolean isPrime(long p, long[] primes) {
long max = (long) Math.ceil(Math.sqrt(p));
for (long divisor : primes) {
if (divisor > max) break;
if (p % divisor == 0) return false;
}
return true;
}
Reference:
http://codereview.stackexchange.com/questions/40673/what-is-the-10001st-prime-number