You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

给定正整数N,求满足A*B*C=N的A+B+C最小值的最优算法咨询

整数三元组拆分求最小和:问题解析与最优解法

经典性确认

这是一个经典的整数优化问题,核心依托均值不等式的整数域延伸结论:对于乘积固定的正整数,当三个数尽可能接近时,它们的和最小。

最优算法步骤

在完成N的质因数分解后,无需依赖易失效的贪心策略,更可靠的解法如下:

方案1:枚举因数候选(高效易实现)

  1. 计算N的立方根 cube_root = int(round(N ** (1/3))),以此为中心,遍历所有满足 A ≤ cube_root 且 A 整除N的正整数A。
  2. 对每个A,计算 M = N // A,再计算M的平方根 sqrt_m = int(round(M ** 0.5)),遍历满足 B ≤ sqrt_m 且 B 整除M的正整数B,此时 C = M // B。
  3. 全程记录所有 A+B+C 的最小值。

由于N≤1e15,其因数总数最多不超过数千(例如高度合数1e15的因数仅256个),该枚举过程的时间复杂度完全可接受。

方案2:回溯分配质因数(适合因数极多的场景)

如果不想生成所有因数,可通过回溯法将质因数的幂次分配给A、B、C:

  • 初始时A=B=C=1,依次处理每个质因数的幂次(比如2^7,可拆为0-7次分配给三个数,幂次总和为7)。
  • 每次分配时,优先将幂次分配给当前最小的数,同时剪枝:若当前A+B+C已大于已知最小值,或某个数远超立方根,则停止该分支的搜索。

贪心算法失效原因

你所用的贪心策略(从大到小将质因数乘到当前最小数)仅能保证局部最优,无法覆盖全局最优的情况。比如你给出的测试用例,大质因数过早分配会导致其中一个数快速增大,后续小质因数无法平衡三者的差距,最终得到的三元组和并非最小。

内容的提问来源于stack exchange,提问作者Shortcake Sweets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:42:19