加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 打印给定数量的所有独特的因素组合

发布时间:2020-12-15 00:10:24 所属栏目:Java 来源:网络整理
导读:什么是打印所有唯一的正整数因子组合的最有效的算法.例如,如果给定的数字是24,则输出应该是 24*112*28*36*46*2*24*3*23*2*2*2 这里注意到当打印6 * 4时,4 * 6不会被打印出来.因此,基本上这是一个不考虑订单的唯一子集的问题(一种查看问题的方法).但目标是具
什么是打印所有唯一的正整数因子组合的最有效的算法.例如,如果给定的数字是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个输入,即一个字符串来传递i的for current的当前值,以执行后续的减少,还有一个temp int知道何时不打印重复的反转,即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)调用此方法让我知道,如果你发现这种方法的缺陷.谢谢!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读