Math 阶乘的素分解

Math 阶乘的素分解,math,primes,factorial,Math,Primes,Factorial,有没有可能在不实际计算阶乘的情况下找到阶乘的素因子 我的观点是找到阶乘的素因子,而不是一个大的数。您的算法应该跳过必须计算阶乘的步骤,并从n中导出素数因子!在N中,我们考虑一个例子:10!2^8 * 3^4 * 5^2 * 7^1. 我通过计算从2到10的每个数字的因子来计算: 2: 2 3: 3 4: 2,2 5: 5 6: 2,3 7: 7 8: 2,2,2 9: 3,3 10: 2,5 然后我只计算了每一个因素。有八个2(1/2、2/4、1/6、3/8和1/10)、四个3

有没有可能在不实际计算阶乘的情况下找到阶乘的素因子


我的观点是找到阶乘的素因子,而不是一个大的数。您的算法应该跳过必须计算阶乘的步骤,并从n中导出素数因子!在N

中,我们考虑一个例子:10!2^8 * 3^4 * 5^2 * 7^1. 我通过计算从2到10的每个数字的因子来计算:

 2: 2
 3: 3
 4: 2,2
 5: 5
 6: 2,3
 7: 7
 8: 2,2,2
 9: 3,3
10: 2,5
然后我只计算了每一个因素。有八个2(1/2、2/4、1/6、3/8和1/10)、四个3(1/3、1/6和2/9)、两个5(1/5和1/10)和一个7(7)

在编写程序时,只需保留一个计数器数组(它只需要与要因子化的最大阶乘的平方根一样大),对于从2到阶乘的每个数字,将其因子的计数添加到计数器数组中


这有帮助吗?

这可能是一个数学问题,而不是一个编程问题,但是的,这是可能的,甚至很容易。在
n
的素因式分解中,每个素数
p
的指数是
floor(n/p)+floor(n/p^2)+floor(n/p^3)+……
。(当
n/p^k
小于
1
时停止)@MarkDickinson:你应该把它变成一个答案。这是一个比当前唯一答案中的算法更好的算法(尽管您在某一点上编写了
n
而不是
n!
)。@KenWhite链接的可能副本根本不是副本。因此应该有一个从2到n的循环,然后它将实际迭代划分为存储在数组中的素因子。如果我正确理解了您的解决方案,我上面的代码应该是这样的:您不需要我查看您的代码。运行它,让我们知道它是否工作。计数器数组只需要为每个小于您要分解的数(?)的素数保存一个计数。50英镑!您只需要最多47个素数:2、3、5、7、11、13、17、19、23、29、31、37、41、43、47。因此,在一个数组中只保留一个计数,这样的程序的性能将是不错的。但这仍然没有给我预期的产出。该计划应该完全污损数字n!并将每个素数及其相应的指数存储到它的分量中。这正是@Mark-Dickinson算法所做的。
 2: 2
 3: 3
 4: 2,2
 5: 5
 6: 2,3
 7: 7
 8: 2,2,2
 9: 3,3
10: 2,5