质因数(素因数或质因子)在数论里是指能整除给定正整数的质数。 除了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(' '));
}
})();
- 优化循环:在分解质因数时,可以只循环到
Math.sqrt(num),因为如果num有一个大于Math.sqrt(num)的因数,那么它必然有一个小于Math.sqrt(num)的对应因数。 - 外层循环:
while (factor * factor <= num)用于控制循环的范围,只循环到Math.sqrt(num)。 - 内层循环:
while (num % factor === 0)用于将num分解为factor的乘积,并将factor加入结果数组arr。 - 最后的判断:如果
num仍然大于1,说明num本身是一个质数,直接将其加入结果数组arr。