06. 여섯 번째 수업: 배수 이야기 (Divisibility Tricks)
어떤 거대한 숫자가 주어졌을 때, 여러분이 파이썬(Python) 컴퓨터가 아니라면 그 숫자가 $3$의 배수인지, $4$의 배수인지 어떻게 1초 만에 눈치챌 수 있을까요? 수학자들은 굳이 나눗셈을 다 해보지 않고도 숫자의 “생김새(자릿수)”만 보고 특정 수의 배수인지 감별해 내는 마술 같은 트릭들을 만들어냈습니다.
학습 목표
- 나눗셈을 직접 하지 않고도 자릿수의 법칙을 통해 배수를 판정하는 방법(Divisibility Rule)을 암기합니다.
- 짝수와 홀수의 근원인 $2$의 배수, 각 자리 숫자의 합이 진실을 말하는 $3$과 $9$의 배수를 알아냅니다.
- 파이썬의
문자열 자르기(String Slicing)기능으로 수학적 배수 판정법을 알고리즘으로 모델링해 봅니다.
1. 인간을 위한 배수 감별법 마술
17세기의 페르마나 디오판투스 같은 수학자들은 컴퓨터가 없었습니다. 그래서 그들은 어마어마한 숫자를 소인수분해할 때 일단 “눈”으로 쓱 보고 배수(약수)를 솎아내는 암산 트릭을 썼습니다.
- [Lv.1] $2$의 배수 (짝수 감별): 맨 끝자리 숫자가 $0, 2, 4, 6, 8$ 이면 무조건 통과! (예: $1,489,14\mathbf{2}$)
- [Lv.1] $5$의 배수: 맨 끝자리가 $0$ 이나 $5$ 이면 무조건 통과! (예: $12,34\mathbf{5}$)
- [Lv.2] $3$의 배수: 모든 자릿수 숫자를 다 더했을 때 그 합산값이 $3$의 배수이면 마법처럼 원래 숫자도 $3$으로 나누어떨어집니다! (예: $123 \rightarrow 1+2+3 = \mathbf{6}$ 이므로 $123$은 무조건 $3$의 배수입니다)
- [Lv.2] $9$의 배수: 마찬가지로 모든 자릿수의 숫자를 더한 값이 $9$의 배수이면 통과! (예: $1,827 \rightarrow 1+8+2+7 = \mathbf{18}$ 이므로 $1,827$은 완벽한 $9$의 배수)
이러한 수학적 자릿수 트릭은 거대한 수의 소인수분해나 방정식을 암산할 때 매우 유용한 사기 기술이 됩니다.
2. Python 코드로 구현하는 $3$의 배수 ‘문자열’ 마술
컴퓨터 입장에서는 % (모듈러) 연산 하나면 저런 복잡한 자릿수 더하기를 할 필요가 없습니다. 하지만 인간 수학자들의 암산 과정인 ‘자릿수 합치기 트릭’ 자체를 파이썬으로 가르치면, 코드에 문자열(String)을 다루는 엄청난 유연성이 생깁니다!
가장 중요한 것은 숫자를 덩어리째 보지 않고 글자(Char) 단위로 하나씩 썰어버리는 것입니다.
# 문과 감성의 인간 배수 판별법 (String Iteration)을 Python으로 번역하기
def human_divisible_by_3(huge_number):
"""
무식하게 나누지 않습니다.
인간처럼 숫자를 글자로 쳐다보고 하나씩 쪼개어(Slice) 덧셈을 시도합니다.
"""
# 1. 1827 이라는 수학 숫자를 "1", "8", "2", "7" 이라는 문자로 강제 변환!
string_number = str(huge_number)
# 자릿수들의 합을 담을 박스
sum_of_digits = 0
# 2. 문자 하나씩 꺼내서 다시 숫자로 바꾸어 더합니다.
for letter in string_number:
sum_of_digits += int(letter)
print(f"-> 👁 시각적 자릿수 총합: {sum_of_digits}")
# 3. 그 합이 3의 배수( % 3 == 0)이면 통과!
if sum_of_digits % 3 == 0:
return True
else:
return False
# 천재 수학자의 눈으로 79,482 를 째려봅시다.
target = 79482
if human_divisible_by_3(target):
print(f"✅ 판독 완료: [{target}] (은)는 아름다운 3의 배수입니다!")
else:
print(f"❌ 판독 완료: [{target}] (은)는 3의 배수가 아닙니다.")
만약 출력이 -> 👁 시각적 자릿수 총합: 30 이고, 이 $30$은 $3$으로 완벽히 떨어지기 때문에 컴퓨터는 덩어리 거대 숫자인 $79,482$ 가 $3$의 배수임을 인간과 똑같은 마술 기법으로 판정해 냈습니다. 데이터의 형식(Type)을 숫자(int)에서 문자(str)로 오가는 마법은 개발자들에게 매우 중요한 데이터 가공 기술입니다.
학습 정리
- 배수 판정법 (Divisibility Rule): 숫자의 끝자리, 혹은 각 자릿수의 합 등 외형적인 규칙만으로 특정 숫자의 배수인지 나눗셈 없이 알아내는 기술.
- 수많은 숫자의 패턴을 빠르게 감식해야 했던 고대 수학자들의 생존 무기였다.
- 파이썬에서는 숫자를 숫자로서 계산(
%)할 수도 있지만, 숫자를 문자열(str)로 강제 치환하여for구문으로 자릿수를 씹어먹는(파싱) 방법은 데이터 크롤링이나 비밀번호 패턴 검증 과정에서 막강한 잠재력을 가진다.
서브목차