본문 바로가기

📌 SW전공-개념/이산구조

[이산구조 개념-21] 정수론 기초 — 나누어떨어짐·mod·진법 변환

1. 정수론(Number Theory)이란

정의

정수론정수와 나눗셈의 기본 속성 및 그 응용 분야를 탐구하는 수학의 한 분야.

작은 씨앗에서 거대한 나무로

정수론은 얼핏 보기에 단순한 정수와 나눗셈에서 시작하지만, 현대 정보 기술의 모든 기반이 여기서 자라난다.

정수론의 응용

응용 분야사용 개념
해시 함수 mod 연산
암호학 (RSA) 소수, 모듈로 합동
디지털 서명 모듈로 거듭제곱
비트코인 큰 소수, 서로 소
의사 난수 생성 선형 합동법
에러 정정 코드 모듈로 합동

💡 충격 사실: 우리가 매일 사용하는 인터넷 보안, 비트코인, 카카오톡 메시지 암호화 — 이 모든 것이 수백 년 전부터 연구된 정수론의 응용이다. 가우스 시대의 순수 수학이 21세기 디지털 세상의 기반이 되었다.


2. 나누어떨어짐 (Divisibility) ⭐⭐⭐

정의

정수 a가 정수 b를 나눌 수 있다는 것은, b를 a로 나누었을 때 나머지가 0이 되는 것을 의미한다.

수학적 표현

a | bb = ac를 만족하는 정수 c가 존재 (단, a ≠ 0)

기호 의미

기호읽는 법의미
a | b "a는 b를 나눈다" b ÷ a의 나머지가 0
a ∤ b "a는 b를 나누지 못한다" 나머지 존재

⚠️ 자주 헷갈리는 표기

표기의미
a | b 관계 (참/거짓)
b / a (계산 결과)

예: 3 | 12는 "참" (관계), 12 / 3은 "4" (값)

용어 정리

용어영문의미
인수 Factor a (b의 인수)
제수 Divisor a (b를 나누는 수)
배수 Multiple b (a의 배수)

예시

식참/거짓이유
3 | 12 12 = 3 × 4
5 | 25 25 = 5 × 5
4 | 14 14 = 4 × 3 + 2 (나머지 있음)
2 | 0 0 = 2 × 0

짝수와 홀수의 정의

개념정의
짝수 2 | n
홀수 2 ∤ n

3. 나누어떨어짐의 4대 절대 성질 ⭐⭐⭐

이 4가지 성질은 정수론 전체에서 가장 자주 사용된다.

4대 성질

번호성질식예시
1 0 나누기 a | 0 모든 a에 대해 성립
2 합의 법칙 a | b ∧ a | c → a | (b+c) 2|4, 2|6 → 2|10
3 곱의 법칙 a | b → a | bc 2|4 → 2|12
4 삼단논법 a | b ∧ b | c → a | c 2|4, 4|8 → 2|8

직관적 이해

① 모든 정수는 0을 나눈다

어떤 수든 0번 곱하면 0이므로, 0은 누구의 배수든 될 수 있다.

② 합의 법칙 — 같은 약수를 가진 수끼리 더해도 그 약수가 보존됨

짝수 + 짝수 = 짝수, 3의 배수 + 3의 배수 = 3의 배수.

③ 곱의 법칙 — 약수는 어떤 수와 곱해도 약수 유지

2의 배수에 무엇을 곱해도 결과는 2의 배수.

④ 삼단논법 — 약수의 약수도 약수

2가 4의 약수이고, 4가 8의 약수이면, 2도 8의 약수.

💡 시험 활용: 이 4가지 성질로 다양한 정수론 명제를 증명할 수 있다. 6강~10강의 증명 전략이 여기서 그대로 활용된다.


4. 나눗셈 정리 (Division Algorithm) ⭐⭐⭐

정의

임의의 정수 a와 양의 정수 d에 대해, a = dq + r을 만족하는 유일한 정수 q(몫)와 r(나머지)이 존재하며, 0 ≤ r < |d|.

사과 나누기 비유

14개의 사과를 3명에게 똑같이 나눈다.

  • 몫 q = 4 (각 사람이 받는 개수)
  • 나머지 r = 2 (남은 사과 개수)
  • 남은 사과는 항상 나누는 수보다 작아야 함

4대 구성 요소

요소영문기호정의
피제수 Dividend a 나뉘는 수
제수 Divisor d 나누는 수 (≠ 0)
Quotient q q = ⌊a/d⌋ (바닥 함수)
나머지 Remainder r r = a − dq

핵심 조건

0 ≤ r < |d| (나머지는 항상 제수보다 작고 0 이상)

계산 예제

a = 14, d = 3

단계계산
1 q = ⌊14/3⌋ = 4
2 r = 14 − (3 × 4) = 14 − 12 = 2
3 검증: 14 = 3 × 4 + 2 ✅
4 조건 검증: 0 ≤ 2 < 3 ✅

음수 a의 경우 ⚠️

a = −14, d = 3은?

단계계산
1 q = ⌊−14/3⌋ = −5 (바닥 함수: −4.67 → −5)
2 r = −14 − (3 × (−5)) = −14 + 15 = 1
3 검증: −14 = 3 × (−5) + 1 ✅
4 조건 검증: 0 ≤ 1 < 3 ✅

💡 시험 함정: 음수에서 나머지는 항상 양수 또는 0이어야 한다. 14강의 바닥 함수 개념이 여기서 핵심이다.


5. mod 연산자 ⭐⭐⭐ 컴퓨터 과학의 필수

정의

a mod d는 정수 a를 양의 정수 d로 나누었을 때의 나머지 r만을 추출하는 연산.

공식

a mod d = a − d · ⌊a/d⌋

시계 비유

25시는 1시와 같다 → 25 mod 12 = 1

13시는 1시와 같다 → 13 mod 12 = 1

나눗셈 정리 vs mod

측면나눗셈 정리mod 연산자
관심 대상 몫 q와 나머지 r 모두 나머지 r만
결과 a = dq + r a mod d = r

mod 계산 예시

식결과
17 mod 5 2 (17 = 5×3 + 2)
100 mod 7 2 (100 = 7×14 + 2)
25 mod 12 1 (시계처럼)
8 mod 8 0
0 mod 5 0

실생활 응용

상황mod 연산
시계 시간 mod 12 (또는 24)
요일 계산 일수 mod 7
컴퓨터 프로그래밍 C/Python의 % 연산자
배열 순환 index mod 배열길이
해시 함수 key mod 테이블크기

💡 프로그래밍 직결: Python·C·Java의 % 연산자가 바로 mod 연산자다. 17 % 5 = 2, 100 % 7 = 2. 매일 쓰는 연산이지만 그 수학적 정의는 정수론에서 왔다.


6. 모듈로 합동 (Congruence) ⭐⭐⭐ 시험 빈출

정의

두 정수 a와 b가 모듈로 m에 대해 합동(Congruent) 이라는 것은, m으로 나누었을 때 a와 b의 나머지가 동일함을 의미.

표기

a ≡ b (mod m)

동치 조건

a ≡ b (mod m) ⟺ m | (a − b) ⟺ ∃k ∈ ℤ, a = b + km

시계 세계 비유

시계는 12시간마다 한 바퀴를 돈다. 13시 = 1시, 25시 = 1시, 37시 = 1시 → 모두 mod 12에서 같은 그룹.

모듈로 m은 숫자의 세계를 m개의 구역으로 나누고, 같은 구역의 숫자들을 "같다"고 본다.

합동 판별 예시

17 ≡ 5 (mod 6) 인가?

방법 1: 나머지 비교
수6으로 나눈 나머지
17 17 = 6×2 + 5
5 5 = 6×0 + 5

→ 나머지 같음 → 합동 ✅

방법 2: 차이의 약수

17 − 5 = 12, 12 = 6 × 2 → 6 | 12

→ 합동 성립

모듈로 합동의 연산 성질 ⭐

a ≡ b (mod m), c ≡ d (mod m)일 때:

연산식
덧셈 허용 a + c ≡ b + d (mod m)
곱셈 허용 a · c ≡ b · d (mod m)

응용 예제

17 ≡ 5 (mod 6), 8 ≡ 2 (mod 6)일 때:

연산검증
17 + 8 = 25 ≡ 5 + 2 = 7 (mod 6) 25 mod 6 = 1, 7 mod 6 = 1 ✅
17 × 8 = 136 ≡ 5 × 2 = 10 (mod 6) 136 mod 6 = 4, 10 mod 6 = 4 ✅

💡 암호학 토대: 모듈로 합동의 연산 성질은 RSA 암호화의 핵심이다. (m^e mod n)을 효율적으로 계산할 수 있는 것이 이 성질 덕분이다.

응용 분야

분야활용
해시 함수 h(key) = key mod m
의사 난수 생성 x[n+1] = (a · x[n] + c) mod m
암호학 RSA, Diffie-Hellman
에러 검출 체크섬 계산

7. 밑수 전개 (Base Expansion) ⭐⭐ 진법의 기초

정의

임의의 양의 정수 n을 1보다 큰 양의 정수 b(밑수)를 사용하여 유일하게 표현하는 방법.

공식

n = aₖbᵏ + aₖ₋₁bᵏ⁻¹ + ... + a₁b¹ + a₀b⁰

여기서 0 ≤ aᵢ < b, aₖ ≠ 0

10진수 분해 예제

165를 밑수 10으로 전개

자리자릿수거듭제곱곱
100의 자리 1 10² = 100 100
10의 자리 6 10¹ = 10 60
1의 자리 5 10⁰ = 1 5

165 = 1·10² + 6·10¹ + 5·10⁰ = (165)₁₀

컴퓨터 세계의 4대 진법 ⭐

진법영문밑수사용 숫자활용
10진수 Decimal 10 0~9 일상 표준
2진수 Binary 2 0, 1 컴퓨터 내부
8진수 Octal 8 0~7 2진수 3자리 묶음
16진수 Hexadecimal 16 0~9, A~F 메모리 주소, 색상 코드

진법별 같은 수 표현

10진수 165를 다른 진법으로:

진법표현
10진수 165
2진수 10100101
8진수 245
16진수 A5

💡 컴퓨터 과학 핵심: 컴퓨터는 0과 1만 이해한다 → 모든 데이터는 2진수로 저장. 인간이 보기 편하게 16진수로 표시 (예: HTML 색상 #FF5733).


8. 진법 변환 알고리즘 ⭐⭐⭐ 시험 단골

핵심 절차

10진수 n을 밑수 b의 진법으로 변환:

단계작업
1 n mod b 계산 → 가장 오른쪽 자릿수
2 n := ⌊n/b⌋ 갱신
3 n이 0이 될 때까지 1~2 반복
4 나머지를 아래에서 위로 읽기

진법 변환 예제 — 10진수 241 → 2진수 ⭐

단계nn mod 2 (자릿수)⌊n/2⌋ (다음 n)
1 241 1 120
2 120 0 60
3 60 0 30
4 30 0 15
5 15 1 7
6 7 1 3
7 3 1 1
8 1 1 0 (종료)

결과 도출

나머지를 아래에서 위로 읽기: 1, 1, 1, 1, 0, 0, 0, 1

(11110001)₂

검증

1·128 + 1·64 + 1·32 + 1·16 + 0·8 + 0·4 + 0·2 + 1·1 = 128 + 64 + 32 + 16 + 1 = 241

공식 알고리즘 (의사코드)

 
 
procedure base_b_expansion(n: positive integer)
    q := n
    k := 0
    while q ≠ 0
        aₖ := q mod b      {나머지를 자릿수로 저장}
        q := ⌊q/b⌋          {몫으로 갱신}
        k := k + 1
    return (aₖ ... a₁ a₀)_b

💡 시험 단골 패턴: "10진수를 2진수로 변환하시오" 또는 "16진수를 10진수로 변환하시오"가 거의 매번 출제된다. 표를 그려 단계별로 진행하는 것이 가장 안전한 풀이법.

거꾸로 — 다른 진법 → 10진수

(11110001)₂ → 10진수?

각 자릿수에 거듭제곱을 곱해 합산: 1·2⁷ + 1·2⁶ + 1·2⁵ + 1·2⁴ + 0·2³ + 0·2² + 0·2¹ + 1·2⁰ = 241


9. 2진수 덧셈 (Binary Addition) ⭐

핵심 원리

10진수 덧셈과 같지만, 0과 1만 사용하므로 합이 2가 되면 올림(carry) 발생.

비트 덧셈 진리표

abc (이전 carry)합계 (sum)새 carry
0 0 0 0 0
0 1 0 1 0
1 0 0 1 0
1 1 0 0 1 ← 올림!
1 1 1 1 1 ← 올림!

2진수 덧셈 예제

1011 + 1101 = ?

 
 
    1 1 1     (carry)
    1 0 1 1
+   1 1 0 1
---------
  1 1 0 0 0
단계별 풀이
자리abcarry in합계carry out
1 (오른쪽) 1 1 0 0 1
2 1 0 1 0 1
3 0 1 1 0 1
4 1 1 1 1 1
5 1 1 0

결과: 11000

검증 (10진수)

1011₂ = 11, 1101₂ = 13 11 + 13 = 24 = 11000₂ ✅

시간 복잡도

O(n) — n개의 비트에 대해 한 번씩만 순회

💡 컴퓨터 핵심: CPU의 ALU(산술논리연산장치) 가 매초 수십억 번 수행하는 연산이 바로 이 2진수 덧셈이다. 단순해 보이지만 모든 컴퓨터 연산의 기초.


10. 2진수 곱셈 (Binary Multiplication) ⭐

핵심 원리

10진수 곱셈과 유사하지만, 각 비트가 0 또는 1이라 매우 단순:

  • 비트가 1이면 → a를 그 자리만큼 왼쪽으로 이동(Shift)
  • 비트가 0이면 → 0
  • 모든 부분 곱을 더함

핵심 슬로건

2진수 곱셈 = Shift + Add

2진수 곱셈 예제

101 × 110 = ?

부분 곱 계산
jbⱼa를 j칸 shift부분 곱 cⱼ
0 0 0
1 1 1010 (101 × 10) 1010
2 1 10100 (101 × 100) 10100
모든 부분 곱 합산
 
 
     0 1 0 1 0    (j=1)
+  1 0 1 0 0      (j=2)
-----------
   1 1 1 1 0

101 × 110 = 11110

검증 (10진수)

101₂ = 5, 110₂ = 6 5 × 6 = 30 = 11110₂ ✅

시간 복잡도

알고리즘시간 복잡도
기본 곱셈 O(n²)
카라추바 알고리즘 O(n^1.585) ⭐

💡 고급 알고리즘: 1962년 카라추바(Karatsuba)는 분할 정복으로 n자리 곱셈을 더 빠르게 하는 알고리즘을 발견했다. 큰 수 곱셈에서 표준 알고리즘보다 훨씬 빠르며, 더 발전된 푸리에 변환 기반 알고리즘은 O(n log n)에 도달한다 (2019년 증명).


11. 종합 — 정수론 21강의 거대한 그림

21강 개념 흐름

 
 
나누어떨어짐 (a | b)
    ↓
나눗셈 정리 (a = dq + r)
    ↓
mod 연산자 (a mod d = r)
    ↓
모듈로 합동 (a ≡ b mod m)
    ↓
밑수 전개 (다양한 진법)
    ↓
진법 변환 알고리즘
    ↓
2진수 연산 (덧셈, 곱셈)

핵심 통찰

정수론은 컴퓨터의 모국어다.

컴퓨터 작업정수론 개념
데이터 저장 2진수 (밑수 전개)
메모리 주소 16진수 표기
해시 테이블 mod 연산
암호화 모듈로 합동
산술 연산 2진수 덧셈·곱셈

📌 한눈에 보는 핵심정리

개념핵심
나누어떨어짐 (a | b) b = ac, 정수 c 존재
4대 성질 0 나누기, 합·곱 법칙, 삼단논법
나눗셈 정리 a = dq + r, 0 ≤ r < |d|
q와 r 계산 q = ⌊a/d⌋, r = a − dq
mod 연산자 a mod d = 나머지 r
모듈로 합동 a ≡ b (mod m) ⟺ m | (a−b)
합동 연산 성질 덧셈·곱셈 모두 합동 보존
밑수 전개 n = Σ aᵢ · bⁱ
주요 진법 2진(컴퓨터), 16진(메모리), 8진, 10진
진법 변환 mod와 ⌊÷⌋ 반복, 아래→위로 읽기
2진수 덧셈 비트별 합 + 올림(carry), O(n)
2진수 곱셈 Shift + Add, O(n²) (기본)

🧠 예상문제 2제

문제 1. 진법 변환

10진수 53을 2진수로 변환한 결과는?

① 110011 ② 110101 ③ 101101 ④ 100101

👉 정답: ②

단계별 풀이
단계nn mod 2 (자릿수)⌊n/2⌋
1 53 1 26
2 26 0 13
3 13 1 6
4 6 0 3
5 3 1 1
6 1 1 0 (종료)
결과

나머지를 아래에서 위로 읽기: 1, 1, 0, 1, 0, 1

(110101)₂

검증

1·32 + 1·16 + 0·8 + 1·4 + 0·2 + 1·1 = 32 + 16 + 4 + 1 = 53

💡 시험 핵심: 진법 변환은 표 그려서 단계별로 진행하는 것이 가장 안전. 머릿속으로 풀면 무조건 한 단계 빠뜨린다. 나머지를 아래에서 위로 읽는 것도 절대 잊지 말 것.


문제 2. 모듈로 합동 응용

다음 중 a ≡ b (mod 7) 이 성립하는 (a, b) 쌍은?

① (15, 8) ② (20, 6) ③ (35, 14) ④ 모두 성립

👉 정답: ④

각 쌍 검증
① (15, 8)

15 mod 7 = 1, 8 mod 7 = 1 → 합동 ✅ 또는 15 − 8 = 7, 7 | 7

② (20, 6)

20 mod 7 = 6, 6 mod 7 = 6 → 합동 ✅ 또는 20 − 6 = 14, 7 | 14

③ (35, 14)

35 mod 7 = 0, 14 mod 7 = 0 → 합동 ✅ 또는 35 − 14 = 21, 7 | 21

결론

모두 mod 7에서 합동 → 정답

💡 추가 학습: 모듈로 합동 판별은 두 가지 방법이 있다.

방법절차
나머지 비교 a mod m과 b mod m이 같은가?
차이의 약수 m이 (a − b)를 나누는가?

시험에서는 두 번째 방법이 빠를 때가 많다. 큰 수의 mod를 직접 계산하지 않고 차이만 보면 된다.