Напишите программу, которая принимает целое число и выводит все способы умножения меньших целых чисел, которые равны исходному числу, без повторения множества факторов. Другими словами, если ваш вывод содержит 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 = д, то сложность времени равна O (N^d). Это связано с тем, что глубина рекурсии будет увеличиваться до числа простых факторов. Но это не сложно. Какие-либо предложения?
Я не думаю, что код работает. Например: 'nextnext' не определен. –
@PaulHankin. К сожалению, это была опечатка. Исправлено: – user12331
дубликат http://stackoverflow.com/questions/38949619/confusion-related-to-the-time-complexity-for-this-algorithm –