מחלק משותף מקסימלי

בתורת המספרים, **מחלק משותף מרבי**  (או **מחלק משותף גדול ביותר**, **ממג"ב**; וכן **gcd** קיצור של **Greatest Common Divisor**) של שני מספרים שלמים הוא המספר השלם הגדול ביותר שמחלק את שניהם ללא שארית. למשל, המחלק המשותף המרבי של 12 ו־18 הוא 6. במושג זה, שהוא אבן פינה בתורת המספרים האלמנטרית, עסק כבר אוקלידס, שאף כלל בספרו "יסודות" את אלגוריתם אוקלידס לחישוב המחלק המשותף המרבי.

המחלק המשותף המרבי של שני מספרים הוא מכפלה של כל הגורמים הראשוניים המשותפים לשני המספרים. תכונתו החשובה ביותר של המחלק המשותף המרבי היא שאפשר להציג אותו כצירוף שלם של שני הגורמים שלו. לדוגמה, המחלק המשותף המרבי של 9 ו-14 הוא 1, ואפשר להציג 1 = 2\cdot 14 - 3 \cdot 9. תכונה זו מאפשרת לחשב הפכי מודולרי ולפתור משוואות מודולריות; מכיוון שניתן למצוא את הצירוף בצורה יעילה, עולה מכך שניתן לבצע חשבון מודולרי בצורה יעילה.

מקובל לסמן את המחלק המשותף המרבי של שני מספרים a, b בסימון \gcd\left(a,b\right), או בקיצור (a,b).

שני מספרים שהמחלק המשותף המרבי שלהם הוא 1 (כדוגמת 9 ו-14) נקראים מספרים זרים או "ראשוניים הדדית".

למחלק המשותף המרבי יש שימושים רבים בענפים אחרים של האלגברה המופשטת; בדומה למחלק המשותף המרבי של זוג מספרים שלמים, אפשר להגדיר מחלק משותף המרבי גם לזוג פולינומים או שלמים אלגבריים, ובאופן כללי ביותר, לזוג איברים בכל תחום שלמות.

## תכונות המחלק המשותף המרבי

המחלק המשותף המרבי של a ו-b מוגדר היטב, פרט למקרה ש-a=b=0 (אז כל מספר מחלק את שניהם). מקרים מיוחדים אחרים הם: (a,0)=a; (a,a)=a; (a,1)=1. תכונה חשובה נוספת, העומדת בבסיס ההגדרה של חבורת אוילר: אם a, b זרים, אז לכל n, (n,ab)=(n,a)(n,b). כמו כן, הוא מחלק כל צירוף ליניארי במקדמים שלמים של a ו-b (ולכן בפרט הוא המספר החיובי הקטן ביותר שניתן לקבל כצירוף ליניארי במקדמים שלמים שלהם).

## חישוב המחלק המשותף המרבי

את המחלק המשותף המרבי של שני מספרים אפשר לחשב בנקל מתוך הפירוק לגורמים שלהם; כך לדוגמה המחלק המשותף המרבי של 495 ו-525 הוא 15, לפי החישוב:

\mbox{gcd}(495,525)=\mbox{gcd}(3^2\cdot 5\cdot 11,3\cdot 5^2\cdot 7)=3\cdot 5=15.

עם זאת, מציאת הפירוק לגורמים היא בעיה קשה, והרבה יותר קל מבחינה חישובית למצוא את המחלק המשותף המרבי ישירות, ללא חישוב הגורמים הראשוניים.

האלגוריתם של אוקלידס לחישוב המחלק המשותף המרבי הוא האלגוריתם הקדום ביותר שהופיע בכתב, אף על פי שללא ספק היו כבר לבבלים שיטות לביצוע חישובים מסוגים שונים. ראשוניותו בכך שהוא עוסק במפורש במקרה הכללי, ואיננו נדרשים להסיק על הצעדים שהוא מפעיל מתוך דוגמאות בודדות.

האלגוריתם מבוסס על אבחנה יסודית: לכל b,q,r, המחלקים המשותפים של b ושל r הם גם המחלקים המשותפים ל-b ול-bq+r. לפיכך, לשני הזוגות יש אותו מחלק משותף מרבי: (qb+r,b)=(b,r). 
כדי לחשב את המחלק המשותף המרבי של שני מספרים טבעיים a, b פעל באופן הבא: חלק את המספר הגדול (נאמר, a), במספר הקטן, וכתוב a=qb+r, כאשר 0\leq r היא השארית. אם r=0, אז המחלק המשותף המרבי שווה ל-b. אחרת, המחלק המשותף המרבי שווה לזה של b ושל r (ומכיוון שהמספר הגדול בזוג זה קטן מן המספר הגדול בזוג הקודם, התהליך מתקדם ומגיע בהכרח אל סופו).

ידוע שמספר פעולות החילוק בהפעלת האלגוריתם אינו עולה על \log_{\varphi}a (כאן \varphi מסמן את יחס הזהב), כאשר החישוב הארוך ביותר (עבור מספרים בגודל נתון) מתרחש בחישוב המחלק המשותף המרבי של מספרי פיבונאצ'י עוקבים. מכאן שמציאת המחלק המשותף המרבי היא יעילה מבחינה חישובית; האלגוריתם פועל במהירות גם עבור מספרים גדולים, בני מאות ספרות.

### דוגמה
המחלק המשותף המרבי של 1071 ו־1029 הוא 21. נראה זאת באמצעות האלגוריתם האוקלידי:

### הצגת המחלק המשותף המרבי כצירוף שלם של גורמיו
בגרסה מורחבת מעט, מאפשר האלגוריתם האוקלידי לא רק למצוא את המחלק המשותף המרבי של שני מספרים, אלא גם להציג אותו כצירוף של מכפלות שלמות של שני המספרים, כלומר: אם \gcd\left(a,b\right)=r ניתן למצוא m,n\isin\mathbb{Z} כך ש ma+nb=r. האבחנה המרכזית בחישוב היא האבחנה הבאה: אם a=qb+r, וכבר ידועה לנו הצגה של (b,r) כצירוף ליניארי (b,r)=mb+nr, ניתן לקבל משתי המשוואות את (b,r) כצירוף ליניארי של a,b באמצעות הצבה פשוטה: r=a-qb ולכן (a,b)=(b,r)=mb+nr=mb+n(a-qb)=na+(m-qn)b.

ניתן לסכם את האמור לעיל באלגוריתם הבא:


```text
Extended_GCD(a,b)
1. if b == 0 return [a,1,0]
2. q = a/b, r = a%b
3. [d,m,n]=Extended_GCD(b,r)
4. return [d,n,m-qn]
```


יעילות האלגוריתם זהה בסדר הגודל שלה ליעילות האלגוריתם הפשוט; מספר האיטרציות שמבצע האלגוריתם נותר זהה, ולכל איטרציה התווספו רק חישובים בסיסיים (מציאת q, חישוב m-qn).

## מחלק משותף מרבי בתחומי שלמות

בכל תחום שלמות R (ואפילו בכל חוג קומוטטיבי) אפשר להגדיר מחלקים: איבר a מחלק איבר b, אם קיים איבר t כך ש-b=ta. יחס החילוק שהוגדר כאן הוא קדם-סדר חלש (הוא אינו אנטי-סימטרי), ובעזרתו אפשר לדבר על "מחלק מרבי" גם בחוגים שאין בהם יחס סדר טבעי: 
* איבר d הוא **מחלק משותף מרבי** (ובקיצור: ממ"מ) של איברים a, b, אם d מחלק את a ואת b, וכל איבר המחלק את שניהם, מחלק את d.
על אף שתחת ההגדרה הזו d מוגדר רק עד כדי כפל באיברים הפיכים, היא מתלכדת עם ההגדרה הרגילה של המחלק המרבי בחוג השלמים עד-כדי סימן.

ישנן הגדרות חזקות יותר: 
*  איבר d הוא **מחלק משותף מרבי מוחלט** של a, b אם \langle a,b\rangle = \langle d \rangle. 
*  איבר d הוא **מחלק משותף מרבי חזק** של a, b אם  האידיאל \langle d\rangle הוא חיתוך האידיאלים השבריים הראשיים המכילים את האידיאל \langle a,b\rangle (בכתיב של פעולת-v (ע"ע תחום שלמות), זה שקול לכך ש-\langle a,b\rangle_v = \langle d \rangle). תנאי זה שקול גם לכך ש-ab/d הוא ה-lcm של a,b. 
* בשפה זו, איבר d הוא **מחלק משותף מרבי** של a, b אם  האידיאל \langle d\rangle הוא חיתוך האידיאלים הראשיים המכילים את האידיאל \langle a,b\rangle. תנאי זה שקול גם לכך ש-ab/d הוא ה-lcm של a,b. 

אם d הוא ממ"מ מוחלט של a,b, אז הוא גם ממ"מ חזק; ואם d הוא ממ"מ חזק של a,b, אז הוא גם ממ"מ. הכיוונים ההפוכים אינם נכונים.
ל-a,b יש ממ"מ חזק אם ורק אם לכל ac,bc יש ממ"מ.

תחום שלמות שבו יש ממ"מ מוחלט לכל שני איברים נקרא תחום ראשי.
תחום שלמות שבו יש ממ"מ לכל שני איברים נקרא תחום gcd; לדוגמה, כל תחום פריקות יחידה הוא תחום gcd.

בהתאמה לשלושת סוגי הממ"מ, 
* אומרים ש-a,b **זרים** אם הממ"מ שלהם הוא 1 (זה שקול לכך שאין להם מחלק משותף לא הפיך); 
* שהם **זרים חזק** אם הממ"מ החזק שלהם הוא R; 
* ושהם **זרים באופן מוחלט** (או **קו-מקסימליים**) אם הממ"מ המוחלט שלהם הוא R. 
מ-a|bc נובע a|c אם ורק אם אם a,b זרים חזק.

לדוגמה, בחוג R = \mathbb{Z}[\sqrt{-3}], המספרים 2, \, 1+\sqrt{-3} זרים (ולכן 1 הוא הממ"מ שלהם), אבל הם אינם זרים חזק משום ששניהם מתחלקים ב-\frac{1+\sqrt{-3}}{2} (מעל R).

## כלי להדגמת רקורסיה
פונקציה המממשת את האלגוריתם של אוקלידס בצורה רקורסיבית משמשת לעיתים קרובות כדי להדגים את העוצמה של שימוש ברקורסיה בתכנות. הפונקציה הבאה שמחשבת gcd מפתיעה בפשטותה, בזכות השימוש ברקורסיה. התחביר מתאים למספר שפות קרובות, ביניהן C ו-Java. ניתן לכתוב פונקציה דומה בכל שפה שתומכת ברקורסיה.

```c
int gcd(int a, int b) {
    if (b==0) return (a);
    else return gcd(b, a % b);
}
```


## ראו גם
* כפולה משותפת מינימלית

## קישורים חיצוניים

* מחשב מחלק משותף מקסימלי
* 

קטגוריה:ערכים שבהם תבנית בריטניקה אינה מתאימה
קטגוריה:תורת המספרים
קטגוריה:אלגברה
קטגוריה:אלגוריתמים
קטגוריה:פעולות בינאריות
קטגוריה:חילוק