如何在JavaScript中找到整数的素因数?

2022-05-12 00:00:00 for-loop primes javascript

我试图找出一个数字的质因数,下面使用了一个Java脚本中的for循环将其记录为‘INTEGER’。我似乎无法让它工作,而且我不确定这是我的JavaScript还是我的计算逻辑。

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
//integer is the value for which we are finding prime factors
var integer = 13195;

var primeArray = [];

//find divisors starting with 2

for (i = 2; i < integer/2; i++) {
  if (integer % i == 0) {

    //check if divisor is prime
    for (var j = 2; j <= i / 2; j++) {
      if (i % j == 0) {
        isPrime = false;
      } else {
        isPrime = true;
      }
    }

    //if divisor is prime

    if (isPrime == true) {
      //divide integer by prime factor & factor store in array primeArray
      integer /= i
      primeArray.push(i);
    }
  }
}

for (var k = 0; k < primeArray.length; k++) {
  console.log(primeArray[k]);
}


解决方案

上述答案的效率为O(N^2)。这里有一个复杂度为O(N)的更好的答案。

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
function primeFactors(n) {
  const factors = [];
  let divisor = 2;

  while (n >= 2) {
    if (n % divisor == 0) {
      factors.push(divisor);
      n = n / divisor;
    } else {
      divisor++;
    }
  }
  return factors;
}

const randomNumber = Math.floor(Math.random() * 10000);
console.log('Prime factors of', randomNumber + ':', primeFactors(randomNumber).join(' '))

您可以随意筛选重复项!

相关文章