我正在做 Project Euler 的第 7 题。我应该做的是计算第 10,001个素数。(素数是一个大于 1 且只能被自身和 1 整除的整数。)
这是我目前的程序:
public class Problem7 {
public static void main(String args[]) {
long numberOfPrimes = 0;
long number = 2;
while (numberOfPrimes < 10001) {
if (isPrime(number)) {
numberOfPrimes++;
}
number++;
}
System.out.println("10001st prime: " + number);
}
public static boolean isPrime(long N) {
if (N <= 1)
return false;
else
return Prime(N, N - 1);
}
public static boolean Prime(long X, long Y) {
if (Y == 1)
return true;
else if (X % Y == 0)
return false;
else
return Prime(X, Y - 1);
}
}
它可以很好地找到,比如第 100个素数,但是使用非常大的输入(例如 10,001)运行会导致堆栈溢出。为什么,我该如何解决这个问题?