找到 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
是您的二进制搜索迭代之一的中间点。
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
是您的二进制搜索迭代之一的中间点。