找到 n,它的阶乘是阶乘的乘积

Find n, where its factorial is a product of factorials

Whosebug 在来自 stackexchange 数学站点的右侧窗格中推广了这个数学 question

我很想知道答案。原来问题是关于一个特定案例 (3!⋅5!⋅7!=n!) 并且答案也是针对这个特定案例的。

从 programmer/programming 的角度来看,我想知道什么是解决问题最充分的算法。

虽然我们有两种情况。一个是问题总有答案,另一个是没有。

输入为 3、5、7,输出为 10,如链接问题所示。

该算法相当简单:

  • 对输入 a、b 和 c 进行排序,使 a <= b <= c
  • c!可以从n!
  • 中分出
  • 这使一个! *乙!等于c+1和n之间的数的乘积,包括
  • 找到下一个素数 p > c。这个数字不能通过乘以 a! * b!,因为a和b都严格小于p,所以它们的因子中不包含p
  • 尝试 c+1 和 p-1 之间的所有候选 n,包括在内
  • 找不到答案就没有解决方法

在 a=3、b=5 和 c=7 的情况下,您找到 7 以上的下一个素数,即 11,并尝试 7+1 和 11-1 之间的所有数字,包括在内(即 8, 9, 和 10) 作为 n.

的候选者

因素a!, b!, c!, ...。对于 a 的给定素数 p,它在 a! 中出现了这么多次:

floor(a / p) + floor(a / p^2) + ...

例如5出现在26!:

26 / 5 + 26 / 25 = 5 + 1 = 6 times

现在您可以二分搜索 n 并检查 a!*b!*c!*... 中的每个质因数是否与 m! 中出现的次数完全相同,其中 m 是您的二进制搜索迭代之一的中间点。