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

时间:2015-09-19 10:20:32

标签: algorithm math factorial

Stackoverflow在stackexchange数学网站的右侧窗格中提升了这个数学question

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

从程序员/编程的角度来看,我想知道什么是最有效的解决问题的算法。

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

输入为3,5,7,输出为10,与链接问题相同。

2 个答案:

答案 0 :(得分:2)

该算法相当简单:

  • 订购输入a,b和c,使得< = b< = c
  • !C可以从n!
  • 中划分出来
  • 这样做了! * b!等于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。

的候选人

答案 1 :(得分:0)

因素a!, b!, c!, ...。对于p的给定素数a,它会多次显示在a!中:

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

例如,5中出现26!

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

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