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

Algorithm 找到一个正好有N个除数的最小数,algorithm,math,Algorithm,Math,假设我们有许多除数N,我想找到一个有N个除数的最小数 我的算法 我找到了素数(pm=[2,3,5,7,…]) 我发现了N的素因子(N=12,p=[2,2,3],反向p-rp=[3,2,2]) 数字*=pm[i]^(rp[i]-1),i=1…素数因子的长度 对于N=12,答案是60=2^(3-1)*3^(2-1)*5^(2-1) 但是对于243这个数字,我的算法给出了错误的答案(5336100——但它不是一个有243个除数的最小数)。预期数量为282240 我的错在哪里?有什么文献吗?让我们从

假设我们有许多除数N,我想找到一个有N个除数的最小数

我的算法

  • 我找到了素数(pm=[2,3,5,7,…])
  • 我发现了N的素因子(N=12,p=[2,2,3],反向p-rp=[3,2,2])
  • 数字*=
    pm[i]^(rp[i]-1)
    ,i=1…素数因子的长度
对于N=12,答案是
60=2^(3-1)*3^(2-1)*5^(2-1)

但是对于243这个数字,我的算法给出了错误的答案(5336100——但它不是一个有243个除数的最小数)。预期数量为282240

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

让我们从这本书开始。现在任何数字都可以表示为素数幂的乘积

会有吗?您可以使用组合数学证明它将具有:

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


当你找到你的
mui
时,你可以通过排序
mui
并将最大的
mui
分配给最小的素数来得到你的最小数。因此,如果你的
m1=2
m2=5
m3=2
,根据萨尔瓦多的回答,数字将是
2^5*3^2*5^2

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

这不一定给出最小答案,如您的示例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。所以一般来说,你的方法只是一个起点。计算完你的答案后,你需要将最大的素数折叠成最小的素数来改进答案。

@salvadodali,如果你能给我一些关于这项任务的文章和文献,那就太好了。我的意思是理论。这不也是N=3的失败吗?你的方法似乎给出了8,但6不是正确答案吗?@HemanGandhi我的方法给出了4表示N=3。2^(3-1) = 4. 4是正确的答案。这个答案没有多大帮助。你只是重新描述了OP在问题中已经掌握的技巧,正如他所说的,并不总是给出正确的答案。问题是
mui
的解决方案不是唯一的。有关进一步的分析,请参阅@user3386109答案。@kfx我将在稍后使其更有帮助。很抱歉,这对你没有帮助。