03. 세 번째 수업: 소수 이야기 (Prime Numbers)
자연수를 블록 장난감인 ‘레고(Lego)’에 비유해 볼까요? 수십, 수백 개의 약수를 주렁주렁 달고 있는 복잡하고 뚱뚱한 자연수라 할지라도, 결국 이 큰 장난감을 아주 잘게 부수고 부수다 보면 ‘더 이상 쪼개지지 않는 가장 기본 블록’들만 남게 됩니다. 수학자들은 이 순수한 기본 블록들을 ‘소수(Prime Number)’라고 부릅니다.
학습 목표
- 약수가 딱 $2$개($1$과 자기 자신)뿐인 우주의 기본 물질 수납 상자, 소수(Prime Number)를 이해합니다.
- 왜 $1$은 소수가 될 수 없는지(오직 약수 1개) 집합의 원리로 파악합니다.
- 파이썬의 핵심 분기문인
if/else와for루프 필터를 병합하여 인공지능 소수 감별사를 만듭니다.
1. 우주를 구성하는 절대 소수(Prime)
소수란 약수가 $1$과 자기 자신, 이렇게 아주 지독하게 딱 $2$개뿐인 숫자를 말합니다.
$2, 3, 5, 7, 11, 13, 17, 19, 23…$
이들은 어떠한 다른 수로도 절대 쪼개거나 틈을 만들 수 없는, 수학계의 다이아몬드(Diamond) 덩어리입니다. 예를 들어 숫자 $10$은 $(2 \times 5)$라는 조립품에 불과하지만, 덩어리인 $2$와 $5$ 자신은 절대 다른 숫자의 곱으로 표현될 수 없는 태초의 오리지널 부품입니다.
고대부터 페르마에 이르기까지, 모든 수학자들은 이 소수들이 언제 나타날지 그 ‘마법의 규칙성’을 찾아내는 데 평생을 바쳤습니다. 하지만 현대 수학의 최고 난제인 [리만 가설(Riemann Hypothesis)]조차 이 소수의 불규칙하고 미친 출몰 패턴을 완벽히 정복하지 못했습니다. 단언컨대, 소수는 우주가 창조한 최고의 암호문입니다.
주의사항: 자연수 $1$은 약수가 자기 자신 $1$개밖에 없어서, “두 개”라는 소수의 자격 미달로 탈락해 영원한 외톨이가 되었습니다.
2. Python의 무자비한 해킹: 소수 판별기 (Prime Checker)
인간은 머리로 눈을 굴리며 이 숫자가 누구로 쪼개질지(예: $143 \rightarrow 11 \times 13$) 끙끙대지만, 파이썬(Python)은 무식하지만 가장 강력한 ‘모든 수로 다 찔러보기(Brute-force)’ 기술을 사용해 초당 hàng 십만 번의 검사를 뚫어버립니다.
# 파이썬으로 만드는 인공지능 소수 해독기 (Prime Checker)
def is_prime(target_number):
"""이 매개변수가 과연 우주의 기본 블록(소수)일까?"""
# 1. 예외 처리: 1은 탈락! (약수가 1개뿐)
if target_number < 2:
return False
# 2. 잔혹한 찌르기 테스트 루프
# 2부터 자기 자신 바로 앞 숫자(target_number - 1)까지
# 무자비하게 돌아가며 한 번이라도 나누어떨어지는지 검사합니다.
for divider in range(2, target_number):
# 만약 단 한 놈(divider)에게라도 뚫려서 나머지(%)가 0이 되어 버리면?
if target_number % divider == 0:
print(f"-> 쉴드 붕괴! {divider} (으)로 조각납니다.")
return False # 즉시 가짜 소수(합성수)로 판정하고 종료.
# 그 어떤 공격(나눗셈)에도 뚫리지 않고 찌꺼기(나머지)들이 생겼다면
# 축하합니다. 당신은 완벽한 진골 소수(Prime)입니다.
return True
# 수학의 왕 페르마가 고민했던 어마어마한 숫자를 필터에 넣어봅시다.
mystery_number = 997
if is_prime(mystery_number):
print(f"✅ 판독 완료: [{mystery_number}] (은)는 절대 쪼개지지 않는 완벽한 다이아몬드 소수입니다.")
else:
print(f"❌ 판독 완료: [{mystery_number}] (은)는 싸구려 조립품(합성수)입니다.")
이 알고리즘(루프 필터)만 탑재하면, 여러분의 낡은 컴퓨터조차 17세기의 콧대 높은 천재 수학자 페르마보다 수백 배는 빠르고 정확하게 소수를 튕겨냅니다.
학습 정리
- 소수 (Prime Number): 우주를 조립하는 가장 순수한 수학의 다이아몬드 부품. 약수가 단 2개(1과 자신)밖에 없는 숫자 덩어리들을 뜻한다.
- 반대로 다른 부품들의 조립인 $4(2\times2)$, $15(3\times5)$ 같은 수들은 합성수(Composite Number)라고 부른다.
- 데이터 검증 루프의 핵심:
for문으로 범위 안에서 모듈러(%연산자)를 계속 검증하다가, 한 번이라도if벽에 걸릴 때 즉시 기능을 폭파해 버리는(return False) 파이썬의 분리-방어 로직.