정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.
첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.
N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.
72
2
2
2
3
3
3
3
6
2
3
2
2
9991
297
103
// const { json } = require("express/lib/response");
// const fs = require("fs");
// const filePath = process.platform === "linux" ? "/dev/stdin" : "./예제.txt";
// let input = fs.readFileSync(filePath).toString().split("\n");
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
let N = parseInt(input);
let divisorArray = [];
let i = 2;
// for (i = 2; i <= Math.sqrt(N); i++) {
// while (N % i === 0) {
// divisorArray.push(i)
// N = N / i
// i=1
// if (i>N){
// break;
// }
// }
// }
while (true) {
if (N % i === 0) {
divisorArray.push(i)
N = N / i
i = 1;
}
i++
if (i > N) {
break;
}
}
divisorArray.sort((a, b) => a - b).map((x) => { console.log(x) });
주석처리한 부분처럼 하면 while문 조건 걸기가 어려워진다.
while문이 끝나지 않는 불상사가 발생하여 while문을 가장 바깥쪽으로 빼 주어 겨우 해결했다.