[Python-알고리즘] 소수론

2025. 5. 26. 18:40·개발이야기/파이썬
728x90

정수론 (Number Theory) 정리 및 응용 문제


1. 정수론이란?

정수론은 정수와 관련된 수학적 성질을 다루는 분야로, 알고리즘 문제 해결에서 중요한 기반이 됩니다.
소수, 최대공약수, 최소공배수, 약수, 배수, 합동(mod) 연산, 유클리드 호제법, 페르마의 소정리 등이 주요 개념입니다.


2. 주요 개념 요약

  • 소수 (Prime Number): 1과 자기 자신만을 약수로 가지는 자연수
  • 최대공약수 (GCD): 두 수가 공통으로 가지는 약수 중 가장 큰 수
  • 최소공배수 (LCM): 두 수의 공통 배수 중 가장 작은 수
  • 유클리드 호제법: GCD를 빠르게 구하는 알고리즘, a % b를 반복
  • 에라토스테네스의 체: 특정 범위의 모든 소수를 구하는 효율적인 방법

3. 응용 문제 및 코드 (주석 포함)

1) 소수 판별

# 소수인지 판별하는 함수
def is_prime(n):
    if n < 2:
        return False  # 2보다 작은 수는 소수가 아님
    for i in range(2, int(n**0.5) + 1):  # 2부터 √n까지 반복
        if n % i == 0:
            return False  # 나누어 떨어지면 소수가 아님
    return True

# 테스트
print(is_prime(17))  # True (소수)

2) 최대공약수와 최소공배수 (유클리드 호제법)

# 최대공약수(GCD)를 구하는 함수
def gcd(a, b):
    while b:
        a, b = b, a % b  # 유클리드 알고리즘
    return a

# 최소공배수(LCM)를 구하는 함수
def lcm(a, b):
    return a * b // gcd(a, b)  # a와 b의 곱을 GCD로 나눈 값

# 테스트
print(gcd(24, 36))  # 12
print(lcm(24, 36))  # 72

3) 에라토스테네스의 체로 소수 목록 구하기

# n 이하의 모든 소수를 구하는 함수 (에라토스테네스의 체)
def sieve(n):
    is_prime = [True] * (n + 1)  # 모든 수를 소수로 초기화
    is_prime[0], is_prime[1] = False, False  # 0과 1은 소수가 아님

    for i in range(2, int(n**0.5) + 1):
        if is_prime[i]:
            for j in range(i*i, n+1, i):  # i의 배수들을 제거
                is_prime[j] = False

    return [i for i, val in enumerate(is_prime) if val]  # 소수 리스트 반환

# 테스트
print(sieve(30))  # 2, 3, 5, 7, 11, 13, 17, 19, 23, 29

4. 시간 복잡도

  • 소수 판별: O(√n)
  • GCD (유클리드 호제법): O(log(min(a, b)))
  • 에라토스테네스의 체: O(n log log n)

5. 실전 팁

  • 정수론 문제는 대부분 시간 초과가 날 수 있으므로 빠른 알고리즘을 기억해두자.
  • mod 연산을 많이 활용하며, (a + b) % m = ((a % m) + (b % m)) % m 을 기억하자.
  • 특히 소수판별, GCD/LCM, 소인수분해는 기본 중의 기본!
728x90

'개발이야기 > 파이썬' 카테고리의 다른 글

[알고리즘] BFS - 너비 우선 탐색  (1) 2025.06.04
[알고리즘] 그래프  (0) 2025.06.03
[Python - 알고리즘] 완전탐색  (0) 2025.05.26
[Python - 알고리즘 ] 정렬  (0) 2025.05.26
[Python-알고리즘] 복잡도  (0) 2025.05.26
'개발이야기/파이썬' 카테고리의 다른 글
  • [알고리즘] BFS - 너비 우선 탐색
  • [알고리즘] 그래프
  • [Python - 알고리즘] 완전탐색
  • [Python - 알고리즘 ] 정렬
Study & Stack
Study & Stack
하루하루 공부하며 개발 지식을 쌓아가는 공간입니다. 자료구조, 알고리즘, C언어, 시스템 프로그래밍까지 공부한 내용을 ‘Stack’처럼 쌓고 공유합니다.
  • Study & Stack
    Study & Stack
    Study & Stack
  • 전체
    오늘
    어제
    • 목차
      • 크래프톤정글이야기
        • 정글의기록
        • TIL - WIL
      • 개발이야기
        • C언어
        • 파이썬
        • 코딩테스트
        • CSAPP
      • 협업툴
        • git
      • 나의 이야기
        • 내돈내산
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Study & Stack
[Python-알고리즘] 소수론
상단으로

티스토리툴바