是否有可能在没有实际计算阶乘的情况下找到阶乘的主要因素?
我的意思是找到析因的主要因素,而不是很多。您的算法应该跳过必须计算阶乘并从n中导出素因子的步骤!其中n <= 4000。
计算阶乘并找到其除数很容易,但是当输入大于n = 22时,我的程序崩溃。因此,我认为无需计算阶乘就可以完成整个过程。
function decomp(n){
var primeFactors = [];
var fact = 1;
for (var i = 2; i <= n; i++) {
fact = fact * i;
}
while (fact % 2 === 0) {
primeFactors.push(2);
fact = fact/2;
}
var sqrtFact = Math.sqrt(fact);
for (var i = 2; i <= sqrtFact; i++) {
while (fact % i === 0) {
primeFactors.push(i);
fact = fact/i;
}
}
return primeFactors;
}
我不希望任何代码,链接,示例和简短的概述就足够了。
答案 0 :(得分:1)
让我们考虑一个例子: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
然后我只计算了每个因素。一共有8个2(1 in 2,2 in 4,1 in 6,3 in 8和1 in 10),4个3(1 in 3,1 in 6和2 in 9),2个5(1 in 5 ,十分之一)和7(十分之一)。
就编写程序而言,只需保留一个计数器数组(它只需要与要分解的最大阶乘的平方根一样大),并为从2到阶乘的每个数字添加一个即可。将其因素计数到计数器数组中。
有帮助吗?