ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • μœ ν΄λ¦¬λ“œ μ•Œκ³ λ¦¬μ¦˜ - 두 수의 μ΅œλŒ€κ³΅μ•½μˆ˜λŠ”?🀨
    ALicademy πŸ‘©‍πŸ«πŸ‘¨‍🏫/μ•Œκ³ λ¦¬μ¦˜ 2021. 7. 4. 23:55

    πŸš€Intro

    치λ§₯의 κ³ μž₯인 λ§₯μΉ˜λ§ˆμ„μ—μ„œλŠ” 맀년 치λ§₯μΆ•μ œπŸ—πŸΊλ₯Ό μ—½λ‹ˆλ‹€. μ˜¬ν•΄λŠ” μΆ•μ œλ₯Ό μœ„ν•΄ μΉ˜ν‚¨ 4,500λ§ˆλ¦¬πŸ—μ™€ λ§₯μ£Ό 7,500μž”πŸΊμ„ μ€€λΉ„ν–ˆμŠ΅λ‹ˆλ‹€. 이것듀을 μ΅œλŒ€ν•œ λ§Žμ€ μ‚¬λžŒλ“€μ—κ²Œ 남김없이 λ˜‘κ°™μ΄ λ‚˜λˆ„μ–΄ μ£Όλ €κ³  ν•  λ•Œ, 1️⃣ μ΅œλŒ€ λͺ‡ λͺ…μ—κ²Œ λ‚˜λˆ„μ–΄ 쀄 수 있으며 2️⃣ ν•œ μ‚¬λžŒ λ‹Ή μΉ˜ν‚¨ λͺ‡ λ§ˆλ¦¬μ™€ λ§₯μ£Ό λͺ‡ μž”μ„ 받을 수 μžˆμ„κΉŒμš”?

     

    문제λ₯Ό λͺ¨λ‘ λ§žμΆ”μ…¨λ‚˜μš”? μ—¬λŸ¬λΆ„μ΄ 이미 μ•Œκ³  κ³„μ‹œλ“―μ΄ 1οΈβƒ£λ²ˆ 문제의 닡은 4,500κ³Ό 7,500의 'μ΅œλŒ€ κ³΅μ•½μˆ˜(Greatest Common Divisor)'인 150λͺ…μž…λ‹ˆλ‹€. λ˜ν•œ 2οΈβƒ£λ²ˆ 문제의 닡은 μΉ˜ν‚¨ 4,500λ§ˆλ¦¬μ™€ λ§₯μ£Ό 7,500μž”μ„ μ΅œλŒ€ κ³΅μ•½μˆ˜μΈ 150으둜 λ‚˜λˆˆ 3λ§ˆλ¦¬μ™€ 5μž”μž…λ‹ˆλ‹€. (ν•œ μ‚¬λžŒλ‹Ή μΉ˜ν‚¨ μ„Έ λ§ˆλ¦¬πŸ“πŸ“πŸ“μ™€ λ§₯μ£Ό 5μž”πŸΊπŸΊπŸΊπŸΊπŸΊμ΄λΌλ‹ˆ... 정말 쒋은 μΆ•μ œλ„€μš”πŸ˜‹)

     

    κ·Έλ ‡λ‹€λ©΄ λ§Œμ•½ nλ…„ ν›„ 치λ§₯μΆ•μ œπŸ—πŸΊκ°€ μ „μ„Έκ³„μ μœΌλ‘œ λŒ€λ°•μ΄ λ‚˜λ©΄μ„œ μΉ˜ν‚¨ 9,876,543λ§ˆλ¦¬πŸ—μ™€ λ§₯μ£Ό 3,456,789μž”πŸΊλ₯Ό μ€€λΉ„ν•œλ‹€κ³  ν•  λ•Œ, 1οΈβƒ£λ²ˆ λ¬Έμ œμ™€ 2οΈβƒ£λ²ˆ 문제의 닡은 각각 λ¬΄μ—‡μΌκΉŒμš”?

     

    μ•„λ§ˆ λ°”λ‘œ 닡을 κ΅¬ν•˜κΈ΄ μ–΄λ €μš°μ‹€ 것 κ°™μ€λ°μš”. 컴퓨터가 λŒ€μ‹  κ΅¬ν•΄λ³΄κ²Œ ν•˜λŠ” 것 μ–΄λ–¨κΉŒμš”?

     

    πŸ’­μ΅œλŒ€ κ³΅μ•½μˆ˜ κ΅¬ν•˜κΈ°

    두 μ •μˆ˜ $a,\ b\ (a \gt b)$의 μ΅œλŒ€ κ³΅μ•½μˆ˜λ₯Ό $\gcd(a, b)$라고 ν•©μ‹œλ‹€. $\gcd(a, b)$λ₯Ό μ»΄ν“¨ν„°λ‘œ μ–΄λ–»κ²Œ ꡬ할 수 μžˆμ„κΉŒμš”?

    1. Brute-force πŸ₯Š

    κ°€μž₯ λ¨Όμ € λ¬΄μ‹ν•˜κ²Œ κ΅¬ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆλ‹€. $\gcd(a, b)$λŠ” 1λΆ€ν„° $b$ 쀑 $a,\ b$ λͺ¨λ‘μ™€ λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λŠ” κ°€μž₯ 큰 μˆ˜μž…λ‹ˆλ‹€. λ”°λΌμ„œ 1λΆ€ν„° $b$κΉŒμ§€ μ°¨λ‘€λ‘œ μ¦κ°€ν•˜λ©° $a,\ b$ λͺ¨λ‘μ™€ λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λŠ”μ§€ ν™•μΈν•˜λ©΄ λ©λ‹ˆλ‹€.

     

    이 μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•œ μ½”λ“œλŠ” μ•„λž˜μ™€ κ°™κ³  β°μ‹œκ°„ λ³΅μž‘λ„λŠ” $O(b)$μž…λ‹ˆλ‹€.

     

    2. κ³΅μ•½μˆ˜μ˜ μ„±μ§ˆ μ΄μš©ν•˜κΈ°

    μ΄λ²ˆμ—λŠ” μš°μ•„ν•˜κ²Œ μˆ˜ν•™πŸ’«μ„ μ΄μš©ν•΄λ³ΌκΉŒμš”?

    κ³΅μ•½μˆ˜μ˜ μ„±μ§ˆ 쀑 ν•˜λ‚˜λŠ” '두 μ •μˆ˜ $a,\ b\ (a \gt b)$의 κ³΅μ•½μˆ˜μ˜ 집합은 $a - b$와 $b$의 κ³΅μ•½μˆ˜ 집합과 κ°™λ‹€'λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 μ„±μ§ˆμ€ μ•„λž˜μ™€ 같이 κ°„λ‹¨ν•˜κ²Œ 증λͺ…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

     

    $pf.\\ a,\ b의 κ³΅μ•½μˆ˜\ gκ°€\ μžˆλ‹€κ³ \ ν•˜μž.\\κ·Έλ ‡λ‹€λ©΄\ a = a'g, \ b = b'g라고\ ν• \ 수\ μžˆλ‹€.\\\ \\μ΄λ•Œ,\ a-b = (a'-b')g\ μ΄λ―€λ‘œ\\ a,\ b의\ κ³΅μ•½μˆ˜μ˜\ 집합은\ a - b와\ b의\ κ³΅μ•½μˆ˜μ˜\ 집합과\ κ°™λ‹€.$

     

    이 μ„±μ§ˆμ„ μ΄μš©ν•˜λ©΄ μ•„λž˜μ™€ 같은 μ½”λ“œλ₯Ό κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

     

    μ΄λ•Œ β°μ‹œκ°„ λ³΅μž‘λ„λŠ” $n = a + b$라고 ν•  λ•Œ, $O(n)$μž…λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ $\gcd(a, b)$λŠ” μ΅œλŒ€ $a+b$번 λ°˜λ³΅ν•˜κΈ° λ•Œλ¬ΈμΈλ° λ‹€μŒκ³Ό 같이 증λͺ…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ°„λ‹¨ν•˜κ²ŒλŠ” μ΅œμ•…μ˜ 경우 즉, $gcd(a, 1)$일 λ•Œ ν•¨μˆ˜κ°€ λͺ‡ 번 μ‹€ν–‰λ˜λŠ”μ§€ μ„ΈλŠ” 방법도 μžˆμŠ΅λ‹ˆλ‹€.

     

    $pf.\\두 \ μ •μˆ˜ \ a,\ b(a\gt b)에\ λŒ€ν•˜μ—¬\\\gcd(a, b) = \gcd(a-b, b) = \gcd(a', b')라고\ ν•˜μž.\\\ \\μ΄λ•Œ\ λ‹€μŒμ™€\ 같은\ 관계가\ μ„±λ¦½ν•œλ‹€.\\\begin{cases} a' = a-b\\ b' = b \end{cases}\\\ \\그리고\ a'+b' = a \lt a+b\ 이닀.\\λ”°λΌμ„œ\ \gcd(a, b)λŠ”\ μ΅œλŒ€\ a+b번\ λ°˜λ³΅ν•œλ‹€.$

     

    μš°μ•„ν•˜κ²Œ μˆ˜ν•™μ„ μ΄μš©ν–ˆλŠ”λ° κ²°κ³ΌλŠ” κ·Έλ ‡κ²Œ λ§Œμ‘±μŠ€λŸ½μ§€λŠ” μ•Šλ„€μš”...πŸ˜‚

    κ·Έλ ‡λ‹€λ©΄ κ³΅μ•½μˆ˜μ˜ λ‹€λ₯Έ μ„±μ§ˆμ„ μ΄μš©ν•΄λ³΄λ©΄ μ–΄λ–¨κΉŒμš”?

     

    πŸ”’μœ ν΄λ¦¬λ“œ μ•Œκ³ λ¦¬μ¦˜

    μœ ν΄λ¦¬λ“œ μ•Œκ³ λ¦¬μ¦˜μ€ 역사상 κ°€μž₯ 였래된 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ 유λͺ…ν•˜κ³  μ•„λž˜μ™€ 같은 μ„±μ§ˆμ„ μ΄μš©ν•˜μ—¬ 두 수의 μ΅œλŒ€ κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•©λ‹ˆλ‹€.

     

    $두\ μ •μˆ˜\ a,\ b\ (a\gt b)에\ λŒ€ν•˜μ—¬\ \gcd(a,\ b) = \gcd(b,\ a \mod b)이닀.$

     

    이 μ„±μ§ˆμ€ λ‹€μŒκ³Ό 같이 κ°„λ‹¨ν•˜κ²Œ 증λͺ…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

     

    $pf.\\r = a\mod b,\ a = b \times t + r\ (t \in Z)라고 \ ν•˜μž.\\\ \\Case\ 1.\ d = \gcd(a, b)μΌλ•Œ,\ d \mid (b \times t + r)이고\ d \mid b이닀.\\λ”°λΌμ„œ,\ d \mid r이닀.\ κ·ΈλŸ¬λ―€λ‘œ,\ \gcd(a, b) = \gcd(b, r)이닀.\\\ \\Case\ 2.\ c = \gcd(b, r)μΌλ•Œ,\ c \mid b이고\ c \mid r이닀.\\λ”°λΌμ„œ,\ c \mid a이닀.\ κ·ΈλŸ¬λ―€λ‘œ,\ \gcd(b, r) = \gcd(a, b)이닀.\\\ \\λ”°λΌμ„œ, \gcd(a, b) = \gcd(b, r)이닀.$

     

    이 μ„±μ§ˆμ„ μ΄μš©ν•˜λ©΄ μ•„λž˜μ™€ 같은 μ½”λ“œλ‘œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

     

    흠... 근데 κ³Όμ—° 이 방법이 λ‹€λ₯Έ 방법듀 보닀 λΉ λ₯ΌκΉŒμš”? πŸ€”

     

    β°λ³΅μž‘λ„ 뢄석

    μ•Œκ³ λ¦¬μ¦˜μ˜ λ³΅μž‘λ„λ₯Ό λΆ„μ„ν•˜λŠ” μ—¬λŸ¬ 방법듀이 μžˆμŠ΅λ‹ˆλ‹€. κ·Έ 쀑 κ°„λ‹¨ν•˜κ²Œ 맀 μ‹€ν–‰λ§ˆλ‹€ 쀄어든 자료의 크기둜 톡해 λ³΅μž‘λ„λ₯Ό λΆ„μ„ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆλ‹€. 그럼 ν•œ 번 λΆ„μ„ν•΄λ³ΌκΉŒμš”?

     

    μœ ν΄λ¦¬λ“œ μ•Œκ³ λ¦¬μ¦˜μ€ 두 μ •μˆ˜ $a,\ b\ (a \gt b)$에 λŒ€ν•˜μ—¬ $b$κ°€ 0이 될 λ•ŒκΉŒμ§€ 반볡적으둜 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

    그럼 μ•„λž˜μ™€ 같이 경우λ₯Ό λ‚˜λˆ μ„œ μƒκ°ν•΄λ³΄λŠ” 건 μ–΄λ–¨κΉŒμš”?πŸ’‘

     

    $\gcd(a, b) = \gcd(a', b') = \gcd(b, a \mod b)라고\ ν• \ λ•Œ\\\ \\Case\ 1\ :\ b\ (=a') \gt \frac{a}{2}\\\ \\a \mod b(=b') = a - b \lt \frac{a}{2}\\\ \\Case\ 2\ :\ b(=a') \le \frac{a}{2}\\\ \\a \mod b(=b') \lt b \le \frac{a}{2}$

     

    경우λ₯Ό λ‚˜λˆ λ³΄λ‹ˆ $a \mod b \lt \frac{a}{2}$인 것이 λΆ„λͺ…ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ 맀 μ‹€ν–‰λ§ˆλ‹€ 자료의 크기가 절반 이상 μ€„μ–΄λ“ λ‹€λŠ” 사싀을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ, β°μ‹œκ°„ λ³΅μž‘λ„λŠ” $O(\log(\min(a, b))$μž…λ‹ˆλ‹€.

     

    Let's do PSπŸ˜†

    그럼 였늘 κ³΅λΆ€ν•œ λ‚΄μš©λ“€λ‘œ 문제λ₯Ό ν•΄κ²°ν•΄λ³ΌκΉŒμš”?

    였늘 ν•΄κ²°ν•  λ¬Έμ œλŠ” BOJ 2609 - μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ μ΅œμ†Œκ³΅λ°°μˆ˜μž…λ‹ˆλ‹€.

    λ¨Όμ € 슀슀둜 ν•΄κ²°ν•΄λ³΄μ‹œκ³  도움이 ν•„μš”ν•˜μ‹œλ©΄ μ•„λž˜ μ½”λ“œλ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

     

    Further Thinking🧐

    $\gcd(a, b) = d$ 라고 ν•  λ•Œ $d = ax + dy\ (x, y \in Z)$둜 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    μ™œλƒν•˜λ©΄ $d$λŠ” $a, b$의 μ΅œλŒ€ κ³΅μ•½μˆ˜μ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ μ΄λ•Œ $x$와 $y$의 값은 μ–΄λ–»κ²Œ μ•Œ 수 μžˆμ„κΉŒμš”?

    그리고 이걸 λ„λŒ€μ²΄ 어디에 μ‘μš©ν•  수 μžˆμ„κΉŒμš”?

    그것듀은 λ‹€μŒ κ°•μ˜μ—μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. πŸ‘¨‍πŸ«πŸ‘¨‍πŸ«πŸ‘¨‍🏫

     

    πŸ“šμ°Έκ³ 

    https://ko.wikipedia.org/wiki/μœ ν΄λ¦¬λ“œ_ν˜Έμ œλ²•

    https://book.algospot.com/

    https://codility.com/media/train/10-Gcd.pdf

     

    λŒ“κΈ€

Designed by Tistory.