유리수

유리수

보통

지침

유리수는 두 정수 a와 b의 몫으로 정의해요. 여기서 a는 분자, b는 분모라고 하고, b != 0이에요.

Note

수학적으로 분모는 0이 될 수 없다는 점에 유의해요. 하지만 많은 유리수 구현에서는 분모가 0이 되는 것을 허용하고, 부동소수점 수의 양의 무한대나 음의 무한대와 비슷하게 동작해요. 그런 경우에도 일반적으로 분모와 분자가 동시에 0이 될 수는 없어요.

유리수 r = a/b의 절댓값 |r|은 |a|/|b|와 같아요.

두 유리수 r₁ = a₁/b₁과 r₂ = a₂/b₂의 합은 r₁ + r₂ = a₁/b₁ + a₂/b₂ = (a₁ * b₂ + a₂ * b₁) / (b₁ * b₂)와 같아요.

두 유리수 r₁ = a₁/b₁과 r₂ = a₂/b₂의 차는 r₁ - r₂ = a₁/b₁ - a₂/b₂ = (a₁ * b₂ - a₂ * b₁) / (b₁ * b₂)와 같아요.

두 유리수 r₁ = a₁/b₁과 r₂ = a₂/b₂의 곱(곱셈)은 r₁ * r₂ = (a₁ * a₂) / (b₁ * b₂)와 같아요.

a₂가 0이 아니라면, 유리수 r₁ = a₁/b₁을 다른 유리수 r₂ = a₂/b₂로 나눈 값은 r₁ / r₂ = (a₁ * b₂) / (a₂ * b₁)이에요.

유리수 r = a/b의 음이 아닌 정수 n제곱은 r^n = (a^n)/(b^n)이에요.

유리수 r = a/b의 음의 정수 n제곱은 r^n = (b^m)/(a^m)이에요. 여기서 m = |n|이에요.

유리수 r = a/b의 실수(부동소수점) x제곱은 몫 (a^x)/(b^x)이고, 이는 실수예요.

실수 x의 유리수 r = a/b제곱은 x^(a/b) = root(x^a, b)예요. 여기서 root(p, q)는 p의 q제곱근이에요.

다음 연산을 구현해요:

  • 두 유리수의 덧셈, 뺄셈, 곱셈, 나눗셈,
  • 절댓값, 주어진 유리수의 정수 제곱, 주어진 유리수의 실수(부동소수점) 제곱, 실수의 유리수 제곱.

유리수 구현은 항상 기약분수로 약분되어 있어야 해요. 예를 들어, 4/4는 1/1로, 30/60은 1/2로, 12/8은 3/2로 약분되어야 해요. 유리수 r = a/b를 약분하려면, a와 b를 a와 b의 최대공약수(gcd)로 나눠요. 예를 들어, gcd(12, 8) = 4이므로 r = 12/8은 (12/4)/(8/4) = 3/2로 약분할 수 있어요. 약분된 유리수는 "표준형"이어야 해요 (분모는 항상 양의 정수여야 해요). 분모가 음의 정수인 경우에는, 분자와 분모에 모두 -1을 곱해서 표준형이 되도록 해요. 예를 들어, 3/-4는 -3/4로 약분되어야 해요.

사용하는 프로그래밍 언어에는 유리수 구현이 없다고 가정해요.


출처

Wikipedia링크가 새 창이나 탭에서 열려요
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C# Exercism

유리수 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.