유리수와 무리수
십진법 체계에서 모든 실수는 크게 두 그룹으로 나눌 수 있습니다.
- 유리수(Rational Number)
- 무리수(Irrational Number)
이 글에서는 그중 유리수에 대해서만 살펴보겠습니다.
유리수란?
p/q(단, q ≠ 0) 형태로 표현할 수 있는 모든 수를 유리수라고 합니다. 예를 들어 14, 4.6, 3.33333… 같은 수들이 모두 유리수에 해당합니다.
유한소수와 순환소수
유리수는 다시 두 그룹으로 나눌 수 있습니다.
- 유한소수(Terminating Decimal)
- 순환소수(Repeating Decimal)
이 분류는 p를 q로 나누었을 때 얻는 결과를 기준으로 하며, 핵심 규칙은 다음과 같습니다.
- q의 소인수가 오직 2와 5뿐이라면 p/q는 반드시 유한소수가 됩니다.
- q의 소인수에 2나 5 이외의 수가 포함되어 있다면 p/q는 순환소수가 됩니다.
문제 정의
따라서 우리는 분모 값 q를 나타내는 숫자 하나를 인자로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 해당 q 값으로 유한소수를 만들 수 있으면 true, 그렇지 않으면 false를 반환해야 합니다.
예제 코드
const num = 1250;
const isTerminating = num => {
while(num !== 1){
if(num % 2 === 0){
num /= 2;
}else if(num % 5 === 0){
num /= 5;
}else{
return false;
};
};
return true;
};
console.log(isTerminating(num));출력 결과
콘솔에 다음과 같은 결과가 출력됩니다.
true
코드 동작 원리
이 함수는 주어진 수를 반복적으로 2 또는 5로 나누어 소인수분해를 진행합니다. 2와 5 어느 쪽으로도 나누어떨어지지 않는데 값이 아직 1이 아니라면, 2와 5 이외의 소인수가 존재한다는 의미이므로 false를 반환합니다. 반대로 모든 나눗셈이 끝나고 값이 1에 도달하면 소인수가 2와 5뿐이라는 뜻이므로 true를 반환합니다. 예제의 1250은 2 × 5⁴로 분해되므로 true가 출력됩니다.