02. 두 번째 수업: 크기가 같은 분수 (Equivalent Fractions)

유리수의 가장 신기한 성질은 “모양과 화장이 달라도 본질은 같을 수 있다”는 점입니다. 우리가 피자 한 판을 시켰을 때, 반으로 잘라서 $\frac{1}{2}$ 판을 먹나, $4$조각으로 잘라서 $\frac{2}{4}$ 조각을 먹나, $8$조각으로 잘라서 $\frac{4}{8}$ 조각을 먹나 결국 내 배에 들어온 피자의 양은 완벽히 똑같습니다.


1. 크기가 같은 분수의 성질

분수의 분모와 분자에 $0$이 아닌 같은 수를 곱하거나, 같은 수로 나누어 주면 항상 그 분수의 원래 크기(비율)는 변하지 않습니다.

1/2, 2/4, 4/8 피자가 시각적으로 똑같은 양임을 보여주는 SVG 인포그래픽. 분모와 분자에 각각 2씩 곱해지는 화살표 애니메이션을 포함함

수식으로 쓰면 이런 규칙입니다 ($c \neq 0$):

  • 곱하기 규칙: $\frac{a}{b} = \frac{a \times c}{b \times c}$
  • 나누기 규칙: $\frac{a}{b} = \frac{a \div c}{b \div c}$

이 두 번째 ‘나누기 규칙’을 이용해서 숫자가 비정상적으로 뚱뚱해진 분수를 가장 가벼운 상태로 다이어트시키는 과정을 우리는 약분(Reduction of a fraction)이라고 부릅니다. 그리고 더 이상 다이어트(약분)가 불가능한, 즉 분모와 분자의 공약수가 $1$뿐인 뼈대만 남은 분수를 기약분수(Irreducible fraction)라고 합니다.

2. 파이썬과 math.gcd를 이용한 자동 기약분수 만들기

사실 약분을 사람이 일일이 소인수분해해가며 계산하는 것은 실수하기 딱 좋습니다. 하지만 우리는 컴퓨터를 다룰 줄 알기 때문에 최대공약수(Greatest Common Divisor, GCD)라는 마법을 부리면 1초 만에 약분을 끝낼 수 있습니다!

분자와 분모를 각각 두 수의 “최대공약수”로 나누어 버리면, 순식간에 기약분수가 완성됩니다. 파이썬에 내장된 math.gcd 함수를 써보겠습니다.

# [Python] 방대한 분수를 뼈대만 남은 '기약분수'로 압축하기
import math

def simplify_fraction(numerator, denominator):
    # 1. 두 숫자의 최대공약수를 구한다!
    common_divisor = math.gcd(numerator, denominator)
    
    # 2. 분자와 분모를 각각 최대공약수로 나눈다 (// 는 정수 나눗셈)
    simp_num = numerator // common_divisor
    simp_den = denominator // common_divisor
    
    return simp_num, simp_den

# 테스트해보기: 1024 / 4096 이라는 거대한 분수
num = 1024
den = 4096

simp_n, simp_d = simplify_fraction(num, den)

print(f"원본 분수: {num} / {den}")
print(f"기약 분수: {simp_n} / {simp_d}")
print(f"적용된 최대공약수: {math.gcd(num, den)}")

[실행 결과]

원본 분수: 1024 / 4096
기약 분수: 1 / 4
적용된 최대공약수: 1024

이렇게 $1024$와 $4096$이라는 무지무지 큰 숫자도, 파이썬이 최대공약수 $1024$를 찰나의 순간에 찾아내어 나누어주면 $\frac{1}{4}$이라는 귀엽고 심플한 기약분수로 변신합니다!

3. 동치(Equivalent)의 중요성

“생긴 건 다른데 완벽히 같다.” 이는 수학에서 단순히 분수뿐만 아니라, 나중에 배울 방정식, 함수, 심지어 암호학에서도 아주 중요한 개념입니다. 복잡한 시스템의 에러를 잡기 위해선 그 시스템을 “자신과 동치(Equivalent)이면서 가장 단순한 형태”로 변환(약분)해서 쳐다보면 오류가 금방 보이기 때문입니다.

서브목차