03. 세 번째 수업: 소수 이야기 (Prime Numbers)

자연수를 블록 장난감인 ‘레고(Lego)’에 비유해 볼까요? 수십, 수백 개의 약수를 주렁주렁 달고 있는 복잡하고 뚱뚱한 자연수라 할지라도, 결국 이 큰 장난감을 아주 잘게 부수고 부수다 보면 ‘더 이상 쪼개지지 않는 가장 기본 블록’들만 남게 됩니다. 수학자들은 이 순수한 기본 블록들을 ‘소수(Prime Number)’라고 부릅니다.


학습 목표

  • 약수가 딱 $2$개($1$과 자기 자신)뿐인 우주의 기본 물질 수납 상자, 소수(Prime Number)를 이해합니다.
  • 왜 $1$은 소수가 될 수 없는지(오직 약수 1개) 집합의 원리로 파악합니다.
  • 파이썬의 핵심 분기문인 if/elsefor 루프 필터를 병합하여 인공지능 소수 감별사를 만듭니다.

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)

1부터 30까지 숫자가 나열된 그리드에서 합성수들이 무자비하게 지워지고 다이아몬드 소수들만 빛나는 에라토스테네스의 체 원리 SVG

인간은 머리로 눈을 굴리며 이 숫자가 누구로 쪼개질지(예: $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세기의 콧대 높은 천재 수학자 페르마보다 수백 배는 빠르고 정확하게 소수를 튕겨냅니다.

학습 정리

  1. 소수 (Prime Number): 우주를 조립하는 가장 순수한 수학의 다이아몬드 부품. 약수가 단 2개(1과 자신)밖에 없는 숫자 덩어리들을 뜻한다.
  2. 반대로 다른 부품들의 조립인 $4(2\times2)$, $15(3\times5)$ 같은 수들은 합성수(Composite Number)라고 부른다.
  3. 데이터 검증 루프의 핵심: for 문으로 범위 안에서 모듈러(% 연산자)를 계속 검증하다가, 한 번이라도 if 벽에 걸릴 때 즉시 기능을 폭파해 버리는(return False) 파이썬의 분리-방어 로직.
서브목차