私は、数値の素因数分解を行うメソッドを作ろうとしていましたが、おそらく最も効率的ではありませんが、なぜそれがうまくいかないのかわかりません。Javaのこの素因数分解コードで何が問題になっていますか?
それはあなたが(それぞれ、要因のArrayList
を返し、入力が素数である場合に応じて、
true
または
false
のいずれかにそれらを期待する正確に何をすべきか
factor()
と
isPrime()
という名前の、私が書いた他の二つの方法で、呼びかけ
public static ArrayList<Integer> primeFactorize(int num) {
ArrayList<Integer> primeFactors = new ArrayList<Integer>();
for (int i = 2; i < Math.sqrt((double) num); i++) {
if (isPrime(i) && factor(num).contains(i)) {
primeFactors.add(i);
num /= i;
if (isPrime(num)) {
primeFactors.add(num);
break;
}
i = 2;
}
}
return primeFactors;
}
)。
私はnum
が12であるとデバッガを経て、そしてそれはprimeFactors
に2を追加した最初のループのためにうまく働きました。それはnum
2である6とi
された状態で再び、アレイの上部に着いたときi < Math.sqrt((double) num)
がfalse
を返さかのようしかし、それはループを終了しました。
しかし6の平方根が少し私も(double) i < Math.sqrt((double) num)
を試してみましたが、それだけでまったく同じことをした2以上であるので、それは、意味がありません。
誰もが私が欠けているものを見ることができますか?すべての返信いただきありがとうございます。
編集:ここで私のコードは、助けてくれてありがとう!私はそれがより効率的になることを確かに知っているので、後でそれをするかもしれませんが、今のところこれは完璧です。あなたのfor
ループでは
public static ArrayList<Integer> primeFactorize(int num) {
ArrayList<Integer> primeFactors = new ArrayList<Integer>();
int i = 2;
while (i < Math.sqrt((double) num)) {
if (isPrime(i) && num % i == 0) {
primeFactors.add(i);
num /= i;
if (isPrime(num)) {
primeFactors.add(num);
break;
}
i = 2;
}
else
i++;
}
return primeFactors;
}
sqrt(num)ではなく、sqrt(i)。だからnum = 12で、6はsqrt(num)より大きい – FredK