以产品的下限最小化总和

时间:2013-03-11 06:33:03

标签: algorithm primes mathematical-optimization

我有一个优化问题,我目前正在通过蛮力解决,但我希望有更好的方法。

问题:给定nd,找到素数p1^e1, ..., pk^ekpi s是不同的),以便

  1. p1^e1 * ... * pk^ek >= n^d
  2. p1^e1 + ... + pk^ek < n很少
  3. 我目前的解决方案是迭代所有可能的素数子集(最多一些固定数),然后遍历所有可能的指数(最多一些固定数),然后测试条件1,然后查看总和是否是最小的至今。这需要很长时间。我能做些什么来加快速度吗?

2 个答案:

答案 0 :(得分:1)

这似乎是knapsack problem。我怀疑它是NP完全的。实际上,如果(d = 1),优化可能等同于保理。

然而,并非所有的背包问题都是NP难的 - 这就是为什么Merkle-Hellman背包密码系统被打破的原因。

答案 1 :(得分:0)

通过AM-GM不等式并使用其他约束,您可以得到:

(n / k)^ k&gt;产品&gt; = n ^ d

因此n ^(k-d)> K ^ķ。记录到基数n我们得到: k-d> K *日志(K)。由于k <= n(基于总和) k *(1-log(k))&gt; d

您可以绘制上面的LHS以估算k。