【问题标题】:Factorizing a number into m factors to minimize the largest of them将一个数分解为 m 个因子以最小化其中最大的一个
【发布时间】:2018-06-06 17:49:44
【问题描述】:

假设你有一个数字 n。 我想把它分解成它的m个因子的乘积。

我正在考虑一种算法来做到这一点。 首先,我在其m th 根下找到了n 的最大因子(f1)。 然后,将 n 替换为 n/f1。 现在在其(m-1)th root 下找到 n 的最大因子

重复这个过程,我得到了一系列因素。

你觉得这个算法对吗?或者有什么地方失败了?

【问题讨论】:

    标签: algorithm factors


    【解决方案1】:

    您的算法在这种情况下失败:n = 2^3 * 3^2 * 5 = 360m = 3。您的算法执行以下步骤:

    1. 计算360^(1/3) = 7.114... 并选择小于该值的360 的最大因子。因此,选择了因子6
    2. 360 替换为6060的最大因数最多为sqrt(60) = 7.746...6
    3. 最后,您的算法选择了最后一个剩余因子 10

    所以你的算法产生了分解n = 6 * 6 * 10。然而,这并不是最优的,因为n = 5 * 8 * 9

    一般来说,您的贪心算法可能会在以后做出使问题恶化的选择。这就是本例中发生的情况:第一个因素选择不当,因此后面的选择只会为您提供次优解决方案。

    【讨论】:

    • 怎么会失败?在问题标题中,OP 要求最小化所选因素中的最大因素,但您提供的两种可能性具有相同的最大因素。我是不是误会了什么?
    • @גלעדברקן 抱歉,我将其视为最大化最小因子。我很快就会构建一个正确的例子
    • @גלעדברקן 已修复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2015-11-04
    相关资源
    最近更新 更多