js常规解法
解法一:
let readline = require('readline');
const r1 = readline.createInterface(process.stdin,process.stdout);
let res = [];
let print = function(line){
for(let i=2;i<=line;i++){
if(line%i == 0){
res.push(i);
print(parseInt(line)/i)
break
}
}
}
r1.on('line',(line)=>{
print(line)
console.log(res.join(' '))
})结果运行时间和内存都不满足要求。于是略微改动,先判断这个数是不是质数,这样遍历数可减少为Math.sqrt(num)。
解法二: 耗时48ms 内存7828kb
let readline = require('readline');
const r1 = readline.createInterface(process.stdin,process.stdout);
let res = [];
let isPrime = function(num){
for (let j = 2; j <= Math.sqrt(num); j++){
if (num%j==0){
return false;
}
}
return true;
}
let print = function(line,i){
if(isPrime(line)){
res.push(line)
}else{
for(;i<=line;i++){
if(line%i == 0){
res.push(i);
let val = parseInt(line)/i;
print(val,i);
break;
}
}
}
};
r1.on('line',(line)=>{
print(line,2);
console.log(res.join(' '));
})想到了在递归的时候就把遍历数改为Math.sqrt(num)。
解法三: 52ms 7724kb
let readline = require('readline');
const r1 = readline.createInterface(process.stdin,process.stdout);
let res = [];
let print = function(line){
for(let i=2;i<=Math.sqrt(line);i++){
if(line%i == 0){
res.push(i);
print(parseInt(line)/i)
break
}
}
}
r1.on('line',(line)=>{
print(line);
if(res.length==0){
console.log(line+' ')
}else{
let ans = res.reduce((pre,cur)=>{
return pre*cur
})
res.push(line / ans)
console.log(res.join(' '))
}
})这种处理方式在输入为质数的时候需要单独判断,耗时竟然比解法二还慢一丢丢...?.



京公网安备 11010502036488号