阶乘分解

时间:2019-05-23 17:22:43

标签: math primes factorial

是否有可能在没有实际计算阶乘的情况下找到阶乘的主要因素

我的意思是找到析因的主要因素,而不是很多。您的算法应该跳过必须计算阶乘并从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;
}

我不希望任何代码,链接,示例和简短的概述就足够了。

1 个答案:

答案 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到阶乘的每个数字添加一个即可。将其因素计数到计数器数组中。

有帮助吗?