解決策:
コード自体に (おそらく) 「何も問題がない」ことが判明しました。それは非効率的です。私の計算が正しければ、このまま実行すると、2011 年 10 月 14 日金曜日までに完了します。お知らせします。
警告: Project Euler #3 を解決しようとしている場合、ネタバレが含まれる可能性があります。
問題は次のように述べています。
13195 の素因数は 5、7、13、29 です。
600851475143 の最大の素因数は?
これが私の解決策です。私は Java とプログラミング全般を始めたばかりですが、これが最も優れた、または最も効率的なソリューションではないことはわかっています。
import java.util.ArrayList;
public class Improved {
public static void main(String[] args) {
long number = 600851475143L;
// long number = 13195L;
long check = number - 1;
boolean prime = true;
ArrayList<Number> allPrimes = new ArrayList<Number>();
do {
for (long i = check - 1; i > 2; i--) {
if (check % i == 0) {
prime = false;
}
}
if (prime == true && number % check == 0) {
allPrimes.add(check);
}
prime = true;
check--;
} while (check > 2);
System.out.println(allPrimes);
}
}
が13195number
に設定されている場合、プログラムは正常に動作し、[29, 13, 7, 5]という結果が生成されます。
のより大きな値に対してこれが機能しないのはなぜnumber
ですか?
密接に関連しています (ただし、だまされていません): 600851475143 の「整数が大きすぎます」というエラー メッセージ