AI Study

인공지능을 위한 프로그래밍 수학

jimmmy_jin 2025. 3. 23. 21:44

프로그래밍에서의 소수와 모듈러 연산: 알고리즘의 시작

컴퓨터 과학을 공부하다 보면 정수론의 개념들이 슬금슬금 튀어나온다.
특히 소수(Prime Number), 모듈러(Modular) 연산, 소인수 분해 같은 개념은
암호학부터 알고리즘 문제 풀이까지 폭넓게 쓰인다.

이번 글에서는 이 개념들을 하나씩 정리해보고, 실제로 Python 코드로 구현하는 예제도 살펴본다.


📌 1. 모듈러 연산이란?

모듈러 연산(Modular Arithmetic)은 나머지 연산이라고도 부른다.
쉽게 말해, 어떤 수를 다른 수로 나눈 뒤 남는 나머지를 구하는 연산이다.

예:

print(10 % 3)  # 출력: 1

즉, 10을 3으로 나누면 몫은 3이고 나머지는 1 → 그게 10 % 3 = 1

🤔 왜 중요할까?

컴퓨터 내부의 이진수(0과 1) 표현에서 모듈러 연산은 매우 유용하다.

  • 시간 계산 (시계: 24시간 → % 24)
  • 배열의 순환 처리
  • 암호화 알고리즘 (예: RSA)

📌 2. 프로그래밍에서의 소수(Prime Number)

소수는 1과 자기 자신만을 약수로 가지는 1보다 큰 정수다.
예: 2, 3, 5, 7, 11, 13, ...

소수는 정수론에서 굉장히 중요한 역할을 하고,
프로그래밍에서도 종종 등장하는 주제다.

소수를 판별하는 가장 기본적인 코드

def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, int(n**0.5)+1):  # √n까지만 확인
        if n % i == 0:
            return False
    return True

print(is_prime(13))  # True

📌 3. 소수를 빠르게 찾는 방법: 에라토스테네스의 체

하나하나 나눠보면서 소수를 판별하는 건 효율이 떨어진다.
그래서 나온 고전적인 알고리즘이 바로 에라토스테네스의 체 (Sieve of Eratosthenes)

🔍 아이디어

  1. 2부터 n까지 리스트를 만든다.
  2. 가장 작은 소수부터 시작해서 그 배수들을 모두 지운다.
  3. 남은 수들은 모두 소수다.

코드 예시

def sieve(n):
    primes = [True] * (n+1)
    primes[0] = primes[1] = False

    for i in range(2, int(n**0.5) + 1):
        if primes[i]:
            for j in range(i*i, n+1, i):
                primes[j] = False

    return [i for i in range(2, n+1) if primes[i]]

print(sieve(30))  # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

📌 4. 소인수 분해 (Prime Factorization)

소인수 분해란 어떤 정수를 소수의 곱으로 나타내는 것을 말한다.
예: 60 → 2 × 2 × 3 × 5

이 개념은 영어로 Prime Factorization이라고 한다.
암호학, 수학 퍼즐, 계산 최적화 등 다양한 곳에 쓰인다.

코드 예시

def prime_factors(n):
    result = []
    i = 2
    while i * i <= n:
        if n % i == 0:
            result.append(i)
            n = n // i
        else:
            i += 1
    if n > 1:
        result.append(n)
    return result

print(prime_factors(60))  # [2, 2, 3, 5]

🎯 마무리

정수론의 개념들은 프로그래밍 알고리즘에서 단순한 수학을 넘어서
효율성, 암호 보안, 최적화와 연결된다.

  • 모듈러 연산은 다양한 실생활 문제 해결에 필수
  • 소수 판별은 암호학 기초
  • 에라토스테네스의 체는 빠른 소수 탐색
  • 소인수 분해는 수의 구조를 이해하는 핵심 도구