정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.
첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.
N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.
logic
- 소인수란
자연수를 나누어 떨어뜨리는 약수 중에서 소수[1]인 약수
이다.- 즉, 어떤 숫자를 소수들의 약수로만 나타내면된다.
- 소수는 1과 자기자신만으로만 나뉘어지는 숫자다.
- 예를 들면
72=9*8=3*3*2*2*2
이다.
이상한 입력값을 넣었을 때 에러처리를 해주기 번거롭네. 물론 따로 모듈로 만들 수는 있지만 코테로 따로 뚝 떼어놓은 코드라서 그런 지 반복해서 코드를 갔다쓰는 방식밖에 없어서 아쉽다
귀찮다 더 좋은 방식 없나.
{
const error_msg = () => {
console.log("입력값이 부적절합니다.");
};
const N: string | null = prompt(
"1보다 크거나 같고 10,000,000보다 작거나 같은 값을 입력해주세요."
);
if (N) {
let n: number = typeof parseInt(N) === "number" ? parseInt(N) : -1;
if (n) {
if (n > 1 && n <= 3) console.log(n);
else {
let i: number = 2;
while (n !== 1) {
if (n % i === 0) {
n /= i;
console.log(i);
} else {
i++;
}
}
}
} else {
error_msg();
}
} else {
error_msg();
}
}
/*
test1
input
72
output
2
2
2
3
3
----
test2
input
3
output
3
----
test3
input
6
output
2
3
----
test4
input
2
output
2
----
test5
input
9991
output
97
103
*/