java - 打印给定数字的所有唯一因子组合

标签 java algorithm recursion time-complexity factors

打印一个正整数的所有唯一因子组合的最有效算法是什么?例如,如果给定的数字是 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/

相关文章:

java - 数组排序问题: 2 different sorting results

java - swing BoxLayout 不起作用

c++ - 模拟一个游戏,每个玩家都有不同的获胜概率?

c++ - 将矩阵拆分为小矩阵 block 的方法

java - 像 Intellij 一样在 Eclipse 中搜索包含特定单词的 java 文件?

java - setAutoCreateRowSorter 不适用于 Int

algorithm - 计算 Pi 的贝拉德算法

python - 如何编写一个递归函数,将字符串中的每个字符乘以 2?

javascript - 正则表达式递归

c - 在循环中使用递归时如何展开?