打印一个正整数的所有唯一因子组合的最有效算法是什么?例如,如果给定的数字是 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);
}
}
}
}
最佳答案
尝试这种递归方法,它还接受另外 2 个输入,即一个字符串,用于在 for 循环中传递 i 的当前值以执行后续归约,还有一个临时整数,用于知道何时不打印重复的反转,即 8*3和 3*8。
public static void printFactors(int number, String parentFactors, int parentVal) {
int newVal = parentVal;
for (int i = number - 1; i >= 2; i--) {
if (number % i == 0) {
if (newVal > i) {
newVal = i;
}
if (number / i <= parentVal && i <= parentVal
&& number / i <= i) {
System.out.println(parentFactors + i + "*" + number / i);
newVal = number / i;
}
if (i <= parentVal) {
printFactors(number / i, parentFactors + i + "*", newVal);
}
}
}
}
并使用 printFactors(12,'',12) 调用此方法
如果您发现这种方法有缺陷,请告诉我。谢谢!
关于java - 打印给定数字的所有唯一因子组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15122437/