有效地获取给定数字的所有除数

新手上路,请多包涵

根据这篇 文章,我们可以通过以下代码得到一个数的所有除数。

 for (int i = 1; i <= num; ++i){
    if (num % i == 0)
        cout << i << endl;
}

例如数字 24 的除数是 1 2 3 4 6 8 12 24

在搜索了一些相关帖子后,我没有找到任何好的解决方案。有什么有效的方法可以做到这一点吗?

我的解决方案:

  1. 通过这个 找到给定数的所有质因数。
  2. 获取这些主要因素的所有可能组合。

不过,好像也不是什么好东西。

原文由 zangw 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 534
2 个回答

因素是成对的。 1 and 24 , 2 and 12 , 3 and 8 , 46

您的算法的改进可能是迭代到 num 而不是一直到 num 的平方根,然后使用 num / i 计算配对因子

原文由 Yu Hao 发布,翻译遵循 CC BY-SA 3.0 许可协议

java 8 递归(在 HackerRank 上工作)。此方法包括对因子求和并以整数形式返回的选项。


    static class Calculator implements AdvancedArithmetic {
        public int divisorSum(int n) {
            if (n == 1)
                return 1;

            Set<Integer> set = new HashSet<>();
            return divisorSum( n, set, 1);
        }

        private int divisorSum(int n, Set<Integer> sum, int start){

            if ( start > n/2 )
                return 0;

            if (n%start == 0)
                sum.add(start);

            start++;

            divisorSum(n, sum, start);

            int total = 0;
            for(int number: sum)
                total+=number;
            return total +n;
        }
    }

原文由 Roberto Cannella 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题