题目描述
题目分析
- 参考:华为机试 - 6 质数因子
- 上面这位同行描述的非常清楚了
- 这个问题的意思就是让你把输入的整数因式分解,只不过因子必须都是质数
例如:180 = 2 * 2 * 3 * 3 * 5;90 = 2 * 3 * 3 * 5
而不是找出所有的质数因子 - 代码优化,减少循环次数,循环到平方根就可以了
- 解释:因为如果它不是质数,那么它一定可以表示成两个数(除了1和它本身)相乘,这两个数必然有一个小于等于它的平方根。只要找到小于或等于的那个就行了
代码
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
const inputArr = []
rl.on('line', function (input) {
inputArr.push(input.trim())
})
function getAllPrimeDivisors(num) {
let res = ''
for(let i = 2; i*i <= num; i++) {
while(num % i === 0) {
res += (i + ' ')
num = parseInt(num / i)
}
}
if(num > 1) res = res + num + ' '
return res
}
rl.on('close', function () {
const res = []
inputArr.forEach(item => {
let s = getAllPrimeDivisors(Number(item))
res.push(s)
})
res.forEach(output => console.log(output))
process.exit(0)
})