κΉ¨μ•Œ κ°œλ… πŸ“‘/μ•Œκ³ λ¦¬μ¦˜

μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•, μ΅œλŒ€κ³΅μ•½μˆ˜(GCD), μ΅œμ†Œκ³΅λ°°μˆ˜(LCM)

interfacer_han 2026. 7. 31. 13:42

#1 μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•

두 μ–‘μ˜ μ •μˆ˜ A, B (A > B) 에 λŒ€ν•˜μ—¬
A = B × Q + R   (0 ≤ R < B) 이라 ν•˜λ©΄,
A, B의 μ΅œλŒ€κ³΅μ•½μˆ˜λŠ”
B, R의 μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ κ°™λ‹€.

μ΅œλŒ€κ³΅μ•½μˆ˜λŠ” 두 μ–‘μ˜ μ •μˆ˜μ˜ κ³΅μ•½μˆ˜ 쀑 κ°€μž₯ 큰 μ–‘μ˜ μ •μˆ˜λ₯Ό μ˜λ―Έν•œλ‹€. μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•μ€ μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.

 

#1-1 증λͺ… 1: D | Aκ³  D | Bλ©΄ D | R이닀.

배경지식: μˆ˜ν•™μ—μ„œ Xκ°€ Y둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λ©΄ 이λ₯Ό, Y | X라 ν‘œν˜„ν•œλ‹€.

72 ÷ 27 = 2 λ‚˜λ¨Έμ§€ 18

 

약속

  • 큰 수 (A): 72
  • μž‘μ€ 수 (B): 27
  • 큰 수λ₯Ό μž‘μ€ 수둜 λ‚˜λˆˆ λͺ« (Q): 2
  • 큰 수λ₯Ό μž‘μ€ 수둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€ (R): 18
  • 큰 μˆ˜μ™€ μž‘은 μˆ˜μ˜ κ³΅μ•½μˆ˜ (D): ? (아직 κ°’이 λ­”μ§€λŠ” λͺ¨λ¦„)

 

μ „κ°œ 1

  • A = B × Q + R
  • R = A - B × Q
  • 양변에 (÷ D)λ₯Ό μ·¨ν•˜λ©΄,
    → R ÷ D = (A ÷ D) - (B ÷ D × Q)

 

μ „κ°œ 2

  • (A ÷ D)의 κ²°κ³ΌλŠ” λ°˜λ“œμ‹œ μ •μˆ˜
  • (B ÷ D × Q)의 결과도 λ°˜λ“œμ‹œ μ •μˆ˜
  • λ”°λΌμ„œ (A ÷ D) - (B ÷ D × Q)의 κ²°κ³Ό λ˜ν•œ μ •μˆ˜
  • κ·Έλ ‡λ‹€λ©΄ R ÷ D λ˜ν•œ μ •μˆ˜λΌλŠ” 말
  • λ‚˜λˆ—μ…ˆμ˜ κ²°κ³Όκ°€ μ •μˆ˜ = λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§„λ‹€!
    → DλŠ” R의 μ•½μˆ˜

 

∴ D | Aκ³  D | Bλ©΄ D | R이닀.

 

#1-2 증λͺ… 2: D' | Bκ³  D' | R이면 D' | A이닀.

72 ÷ 27 = 2 λ‚˜λ¨Έμ§€ 18

 

약속

  • 큰 수 (A): 72
  • μž‘μ€ 수 (B): 27
  • 큰 수λ₯Ό μž‘μ€ 수둜 λ‚˜λˆˆ λͺ« (Q): 2
  • 큰 수λ₯Ό μž‘μ€ 수둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€ (R): 18
  • μž‘μ€ μˆ˜μ™€ λ‚˜λ¨Έμ§€μ˜ κ³΅μ•½μˆ˜ (D'): ? (아직 λͺ¨λ¦„)

 

μ „κ°œ 1

  • A = B × Q + R
  • 양변에 (÷ D')λ₯Ό μ·¨ν•˜λ©΄,
  • → A ÷ D' = (B ÷ D' × Q) + (R ÷ D')

 

μ „κ°œ 2

  • (B ÷ D')의 κ²°κ³ΌλŠ” λ°˜λ“œμ‹œ μ •μˆ˜
  • λ”°λΌμ„œ (B ÷ D' × Q)의 결과도 λ°˜λ“œμ‹œ μ •μˆ˜
  • (R ÷ D')의 결과도 λ°˜λ“œμ‹œ μ •μˆ˜
  • λ”°λΌμ„œ (B ÷ D' × Q) + (R ÷ D')의 κ²°κ³Ό λ˜ν•œ μ •μˆ˜
  • κ·Έλ ‡λ‹€λ©΄ A ÷ D' λ˜ν•œ μ •μˆ˜λΌλŠ” 말
  • λ‚˜λˆ—μ…ˆμ˜ κ²°κ³Όκ°€ μ •μˆ˜ = λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§„λ‹€!
    → D'λŠ” A의 μ•½μˆ˜

 

∴ D' | Bκ³  D' | R이면 D' | A이닀.

 

#1-3 정리

이미 증λͺ…ν•œ 것

  • A = B × Q + R μ—μ„œ
    • A와 B의 λͺ¨λ“  κ³΅μ•½μˆ˜ 즉, κ³΅μ•½μˆ˜ μ§‘ν•© D
      → μ¦λͺ… 1에 μ˜ν•΄, λͺ¨λ“  DλŠ” R의 μ•½μˆ˜μ΄κΈ°λ„ ν•˜λ‹€.
    • B와 R의 λͺ¨λ“  κ³΅μ•½μˆ˜ 즉, κ³΅μ•½μˆ˜ μ§‘ν•© D'
      → μ¦λͺ… 2에 μ˜ν•΄, λͺ¨λ“  D'은 A의 μ•½μˆ˜μ΄κΈ°λ„ ν•˜λ‹€.

 

μ „κ°œ

  • D에 μ†ν•˜λŠ” μ–΄λ–€ 수 xλŠ” (R의 μ•½μˆ˜μΌν…Œλ‹ˆ) λ°˜λ“œμ‹œ D'에 λ“€μ–΄κ°„λ‹€ (D ⊆ D').
  • D'에 μ†ν•˜λŠ” μ–΄λ–€ 수 yλŠ” (A의 μ•½μˆ˜μΌν…Œλ‹ˆ) λ°˜λ“œμ‹œ D에 λ“€μ–΄κ°„λ‹€ (D ⊇ D').
  • (D ⊆ D') 이고 (D ⊇ D') μ΄λ―€λ‘œ, D와 D' 사이에 μ„œλ‘œ λ‹€λ₯Έ μ›μ†ŒλŠ” 단 ν•˜λ‚˜λ„ μ‘΄μž¬ν•  수 μ—†λ‹€.
    → D = D'

 

∴ A, B의 μ΅œλŒ€κ³΅μ•½μˆ˜λŠ” B, R의 μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ κ°™λ‹€.

 

#2 μ΅œλŒ€κ³΅μ•½μˆ˜(GCD) κ΅¬ν•˜κΈ°

μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜ gcd(a, b)κ°€ μžˆλ‹€κ³  치자 (aμ—λŠ” 큰 수, bμ—λŠ” μž‘μ€ 수 ν• λ‹Ή). bκ°€ 0일 λ•Œ, 즉 gcd(a, 0)이면 μ΅œλŒ€κ³΅μ•½μˆ˜λŠ” aλ‹€. 0은 (0을 μ œμ™Έν•œ) λͺ¨λ“  수둜 λ‚˜λˆŒ 수 있기 λ•Œλ¬Έμ—, a의 μ•½μˆ˜ 쀑 제일 큰 수인 aκ°€ μ΅œλŒ€κ³΅μ•½μˆ˜κ°€ λ˜λŠ” 것이닀.

 

여기에 λ°©κΈˆκΉŒμ§€μ˜ 증λͺ…(#1)을 더해 μ½”ν‹€λ¦° μˆ˜μ‹μ„ 써보자면,

// Greatest Common Divisor (μ΅œλŒ€κ³΅μ•½μˆ˜)
fun gcd(a: Int, b: Int): Int {
    return if (b == 0) {
        a
    } else {
        gcd(b, a % b) // %λŠ” λ‚˜λˆ—μ…ˆ 결과의 'λ‚˜λ¨Έμ§€'λ₯Ό λ°˜ν™˜ν•˜λŠ” μ—°μ‚°μž
    }
}

λ­”κ°€ μ΄μƒν•œ μ μ΄ μžˆλ‹€. λ°”λ‘œ, a ≥ bμž„μ„ νŒλ‹¨ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ²ƒμ΄λ‹€. μ™œ κ·ΈλŸ΄κΉŒ? a < b라면 a % b = aμ΄λ―€λ‘œ, μ²« μž¬κ·€ ν˜ΈμΆœμ—μ„œ gcd(b, a)κ°€ λ˜μ–΄ λ‘ μˆ˜μ˜ μœ„μΉ˜κ°€ μžλ™μœΌλ‘œ λ’€μ§‘νžˆκΈ° λ•Œλ¬Έμ΄λ‹€.

 

#3 μ΅œλŒ€κ³΅λ°°μˆ˜(LCM) κ΅¬ν•˜κΈ°

배경지식: κ³΅ν†΅λœ μ•½μˆ˜κ°€ 였직 1밖에 μ—†λŠ”(= μ΅œλŒ€κ³΅μ•½μˆ˜κ°€ 1) 두 μ •μˆ˜μ˜ 관계λ₯Ό μ„œλ‘œμ†ŒλΌ ν•œλ‹€.

 

약속

  • 두 μ–‘μ˜ μ •μˆ˜ A와 B의 μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό G라 ν•˜μž.
    • A = G × a
    • B = G × b
  • a와 b의 μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό d라 ν•˜μž.
    • A = G × d × α
    • B = G × d × β
  • A와 B의 κ³΅λ°°μˆ˜λ₯Ό M이라 ν•˜μž.
    • M = G × a × m

 

μ „κ°œ 1

  • (G × d)λŠ” A와 B의 κ³΅μ•½μˆ˜
  • dλŠ” μ΅œλŒ€κ³΅μ•½μˆ˜μ΄λ―€λ‘œ λ°˜λ“œμ‹œ μ–‘μ˜ μ •μˆ˜μž„ (#1에 μžˆλŠ” μ΅œλŒ€κ³΅μ•½μˆ˜μ˜ μ •μ˜ μ°Έμ‘°)
  • dκ°€ 1이 μ•„λ‹ˆλ©΄ A와 B의 μ΅œλŒ€κ³΅μ•½μˆ˜κ°€ Gκ°€ μ•„λ‹ˆκ²Œλ˜λ―€λ‘œ (λͺ¨μˆœ), dλŠ” λ°˜λ“œμ‹œ 1
    → a와 bλŠ” μ„œλ‘œμ†Œ

 

μ „κ°œ 2

  • M = G × a × m의 양변에 (÷ B)λ₯Ό μ·¨ν•˜λ©΄,
    M ÷ B = (G × a × m) ÷ B
    = (G × a × m) ÷ (G × b)
    = (a × m) ÷ b
  • (M ÷ B)λŠ” μ •μˆ˜
    → 즉, (a × m) ÷ b의 κ²°κ³Όκ°€ μ •μˆ˜
  • a와 bλŠ” μ„œλ‘œμ†Œμ΄λ―€λ‘œ, m은 λ°˜λ“œμ‹œ b의 배수(b, 2b, 3b, ...)μ—¬μ•Όλ§Œ 함. κ·Έλž˜μ•Ό (a × m) ÷ b의 κ²°κ³Όκ°€ μ •μˆ˜κ°€ 되기 λ•Œλ¬Έ.
    → M = G × a × m = G × a × b × n (n은 1, 2, 3, ...)


∴ A와 B의 λͺ¨λ“  곡배수 M의 μ΅œμ†Ÿκ°’ 즉, μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” G × a × b = A × B ÷ G

 

μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό κ΅¬ν•˜λŠ” μ½”ν‹€λ¦° μˆ˜μ‹μ„ 써보자면,

// Least Common Multiple (μ΅œμ†Œκ³΅λ°°μˆ˜)
fun lcm(a: Int, b: Int): Int {
    return a / gcd(a, b) * b
}

μ™œ A × B ÷ G 순이 μ•„λ‹ˆλΌ, A ÷ G × B 둜 μΌμ„κΉŒ? λ°”λ‘œ μ˜€λ²„ν”Œλ‘œμš° λ°©μ§€ λ•Œλ¬Έμ΄λ‹€. Int × Intκ°€ Int의 λ²”μœ„λ₯Ό λ²—μ–΄λ‚  μˆ˜λ„ μžˆμœΌλ‹ˆ, λ‚˜λˆ—μ…ˆμ„ λ¨Όμ €ν•΄μ„œ Int의 λ²”μœ„λ₯Ό λ²—μ–΄λ‚  ν™•λ₯ μ„ 쀄인 것이닀.