什么是质因子
质因子(或质因数)在数论里是指能整除给定正整数的质数。根据算术基本定理,不考虑排列顺序的情况下,每个正整数都能够以唯一的方式表示成它的质因数的乘积。两个没有共同质因子的正整数称为互质。因为1没有质因子,1与任何正整数(包括1本身)都是互质。只有一个质因子的正整数为质数。
简而言之,也就是因数是质数的称为质因子。
解题思路
-
我们从因数为2开始循环,循环到数字结束,判断i是否能被整除,是则是该数字的因子,又因为质因子只要循环到开平方就行了,所以不用循环到该整数。
-
例如,对于正整数 12,它的质因子是 2 和 3。因为 2 和 3 都是质数,而且 12 可以被它们整除。
以下是一些获取正整数质因子的基本步骤:
- 从最小的质数开始,即 2,尝试将给定正整数除以 2。
- 如果可以整除,将 2 作为一个质因子,并将被除数更新为除以 2 的结果。
- 接着,再次尝试将被除数除以 2,直到不能整除为止。
- 然后,尝试将被除数除以下一个质数,重复上述步骤,直到被除数变为 1。
-
为什么只循环到开平方就行了,因为一个数的因数都是成对的,比如
12=1 *12
=2*6
=3*4
=4*3
=6*2
=12*1
比如25
25=1*25
=5*5
=25*1
如果到了他的根号,还没有一个因子出现,那么后半部分也不会有因子出现了 -
参考文件:
https://blog.51cto.com/BigPanda/5469004
https://blog.csdn.net/weixin_43899069/article/details/113059005
https://zhidao.baidu.com/question/320350773.html
代码
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 tokens = line.split(' ');
let num = parseInt(tokens[0]);
let num_sqrt = Math.sqrt(num);
let result = [];
for (let i = 2; i <=num_sqrt; i++) {
while(num%i === 0) {
result.push(i);
num /= i;
}
}
if (num !== 1) {
result.push(num);
}
console.log(result.join(' '));
}
}()