Каков наиболее эффективный алгоритм для печати всех уникальных комбинаций факторов положительного целого числа. Например, если данное число 24, то выход должен бытьПечать всей уникальной комбинации факторов заданного числа
24*1
12*2
8*3
6*4
6*2*2
4*3*2
3*2*2*2
Вот обратите внимание, что при 6 * 4 распечатана затем 4 * 6 не получает распечатаны. Таким образом, в основном это проблема взятия уникальных подмножеств без учета порядка (один из способов взглянуть на проблему). Но цель состоит в том, чтобы иметь функцию, которая работает быстрее, поэтому сохранение факторов в структуре данных для дальнейших манипуляций может потребовать больше времени. Я попробовал свой алгоритм и вставил свой код ниже, но он, похоже, не дает мне желаемого результата, я ошибаюсь в своем рекурсивном вызове. Можете ли вы помочь мне найти эффективный способ сделать это?
public static void printfact(int num){
int temp=0;
for(int i=num-1;i>=num/2;i--){
if(num % i == 0){
temp = num/i;
System.out.println(temp + " * " + i);
if(isprime(i)==false){
System.out.print(temp + " * ");
printfact(i);
}
}
}
}
Спасибо за вопрос редактирование предложений Санджив – crazyim5
я думаю, что вам нужно: http://en.wikipedia.org/wiki/Combination#Number_of_combinations_with_repetition после вы найдете все факторы. –
Ни 6, ни 4 не являются основными факторами 24 (или любого другого числа), так как они не являются, ну ... просто. – Philip