【简单】算法nodeJs:质数因子

129 阅读1分钟

image.png

质因数(素因数或质因子)在数论里是指能整除给定正整数的质数。 除了1以外,两个没有其他共同质因子的正整数称为互质。 因为1没有质因子,1与任何正整数(包括1本身)都是互质。 正整数的因数分解可将正整数表示为一连串的质因子相乘,质因子如重复可以用指数表示。 根据算术基本定理,任何正整数皆有独一无二的质因子分解式。 只有一个质因子的正整数为质数。

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    while ((line = await readline())) {
        let num = Number(line);
        let arr = [];
        let factor = 2;

        while (factor * factor <= num) {
            while (num % factor === 0) {
                arr.push(factor);
                num /= factor;
            }
            factor++;
        }

        if (num > 1) {
            arr.push(num);
        }

        console.log(arr.join(' '));
    }
})();

  1. 优化循环:在分解质因数时,可以只循环到 Math.sqrt(num),因为如果 num 有一个大于 Math.sqrt(num) 的因数,那么它必然有一个小于 Math.sqrt(num) 的对应因数。
  2. 外层循环while (factor * factor <= num) 用于控制循环的范围,只循环到 Math.sqrt(num)
  3. 内层循环while (num % factor === 0) 用于将 num 分解为 factor 的乘积,并将 factor 加入结果数组 arr
  4. 最后的判断:如果 num 仍然大于 1,说明 num 本身是一个质数,直接将其加入结果数组 arr