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(' '))
    }
})

这种处理方式在输入为质数的时候需要单独判断,耗时竟然比解法二还慢一丢丢...?.