找到一个具有正好N个除数的最小数字

时间:2016-01-09 02:08:25

标签: algorithm math

我们假设我们有一些除数N.我想找到一个有{n}除数的minimum number

我的算法

  • 我找到了素数(pm = [2,3,5,7,..])
  • 我找到了N的素因子(N = 12,p = [2,2,3],反转p rp = [3,2,2])
  • number * = pm[i]^(rp[i]-1),i = 1 ...素数因子的长度

对于N = 12,答案为60 = 2^(3-1) * 3^(2-1) * 5^(2-1)

但是对于数字243我的算法给出了错误的答案(5336100 - 但它不是具有243个除数的最小数)。预期的数字是2822400

我的错在哪里?有文献吗?

2 个答案:

答案 0 :(得分:6)

让我们从OEIS sequence开始。现在任何数字都可以表示为主要权力的产物。

enter image description here

它会有{p> How many divisors吗?你可以使用它将具有的组合来证明:

enter image description here

所以你必须解决上面的表达式等于你所拥有的分割数的等式。我不会在这里编写代码,但请注意,因为您正在寻找整数解,所以您可以计算出除数的数量。

当您找到m_i后,您可以通过排序m_i并将最大m_i分配给最小素数来获得最小数字。因此,如果您的m1 = 2m2 = 5m3 = 2,该号码将为2^5 * 3^2 * 5^2

答案 1 :(得分:4)

以SalvadorDali的回答为基础:

假设N是(m i + 1)的乘积,你试图通过计算N的素因子分解来找到m i ,然后减去1从每个因素。

这并不一定能给出最小答案,如你的例子所示,N = 243。 243的主要因子分解是

243 = 3*3*3*3*3

所以你的方法建议最小值应该是

2^2 * 3^2 * 5^2 * 7^2 * 11^2 = 5336100

然而,243的替代复合因子分解是

243 = 9*3*3*3

表明最低要求

2^8 * 3^2 * 5^2 * 7^2 = 2822400

复合因子分解效果更好,因为2 ^ 6小于11 ^ 2。所以一般来说,你的方法只是一个起点。计算完答案后,您需要将最大的素数折叠成最小的素数以改善答案。