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 など) で実行すると、スタック オーバーフローが発生します。なぜ、どうすればこれを修正できますか?