📜  素数分解javascript(1)

📅  最后修改于: 2023-12-03 14:56:45.938000             🧑  作者: Mango

素数分解 JavaScript

在计算机科学中,素数分解是指将一个正整数分解成若干个质数的乘积的过程。在本文中,我们将讨论如何使用 JavaScript 对整数进行素数分解。

算法思路

素数分解算法的核心思想是将待分解的正整数 n 逐个除以小于等于 √n 的质数,如果 n 能够被除尽,则将该质数记录下来,继续对 n 进行除以这个质数后的商,直到 n 不再能被除尽为止。

例如,将 42 分解成质数的乘积的过程如下:

  1. 找到小于等于 √42 的所有质数,即 [2, 3, 5, 7]。
  2. 用其中的质数从小到大除以 42,发现 2 和 3 均能被除尽,记录下来。
  3. 对商 7 继续执行以上两个步骤,发现 7 本身就是质数,记录下来。
  4. 最终得到 42 的质因数分解式为 2 × 3 × 7。
代码实现

基于上述算法思路,我们可以使用以下 JavaScript 代码对任意正整数进行素数分解:

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;
}

这段代码定义了一个名为 primeFactors 的函数,接受一个正整数参数 n,返回一个包含 n 的质因数的数组 factors

首先,定义了一个空数组 factors 和初始除数 divisor,默认为 2。

然后,当 n 大于等于 2 时,对 n 进行如下操作:

  1. 如果 n 能够被 divisor 整除,将 divisor 记录在质因数数组中,并将 n 更新为 n 除以 divisor 后的商。
  2. 如果 n 不能被 divisor 整除,将 divisor 加 1,继续执行以上操作。

最后,返回质因数数组 factors

测试样例

为了验证 primeFactors 函数的正确性,我们可以编写如下测试函数:

function testPrimeFactors() {
  const testCases = [
    { input: 2, expected: [2] },
    { input: 3, expected: [3] },
    { input: 4, expected: [2, 2] },
    { input: 42, expected: [2, 3, 7] },
    { input: 123456, expected: [2, 2, 2, 2, 3, 643] },
  ];

  testCases.forEach(({ input, expected }) => {
    const result = primeFactors(input);

    console.log(`Input: ${input}`);
    console.log(`Expected: ${expected}`);
    console.log(`Result: ${result}`);
    console.log(result.toString() === expected.toString() ? 'Pass' : 'Fail');
    console.log('---');
  });
}

testPrimeFactors();

此函数会遍历一个包含多组测试用例的数组,分别调用 primeFactors 函数并比较其返回值与预期结果是否相等。如果相等,输出 'Pass',否则输出 'Fail' 并给出详细的测试结果。