整数をとり、元の数に等しい小さな整数を乗算するすべての方法を出力します。言い換えれば、出力に4 * 3が含まれている場合、繰り返しセットとなる3 * 4を再度印刷しないでください。これは素因数分解のみを求めているわけではないことに注意してください。また、入力整数は妥当であると仮定できます。正しさは効率よりも重要です。 PrintFactors(12)12 * 1 6 * 2 4 * 3,3 * 2 * 2このアルゴリズムの時間の複雑さは何ですか
public void printFactors(int number) {
printFactors("", number, number);
}
public void printFactors(String expression, int dividend, int previous) {
if(expression == "")
System.out.println(previous + " * 1");
for (int factor = dividend - 1; factor >= 2; --factor) {
if (dividend % factor == 0 && factor <= previous) {
int next = dividend/factor;
if (next <= factor)
if (next <= previous)
System.out.println(expression + factor + " * " + next);
printFactors(expression + factor + " * ", next, factor);
}
}
}
私は、それが
所定数はN及びN = Dの素因数の数である場合
だと思います時間複雑度はO(N^d)である。これは、再帰の深さが素因数の数に達するためです。しかし、縛られていない。助言がありますか?
私はコードが動作しないと思う。例えば、 'nextnext'は定義されていません。 –
@PaulHankin。申し訳ありません、それはタイプミスでした。これを修正した – user12331
http://stackoverflow.com/questions/38949619/confusion-related-to-the-time-complexity-for-this-algorithm –