`

10001st prime number

阅读更多

 

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics