Loading AI tools
מוויקיפדיה, האנציקלופדיה החופשית
אלגוריתם אוקלידס הוא אלגוריתם אריתמטי המאפשר למצוא, בהינתן שני מספרים טבעיים, את המחלק המשותף המקסימלי שלהם.
התיעוד הקדום ביותר של האלגוריתם הוא בספר יסודות של אוקלידס, בסביבות שנת 300 לפני הספירה. זהו אחד האלגוריתמים העתיקים ביותר הנמצאים בשימוש היום.
האלגוריתם הוא אחד מהכלים המרכזיים בתורת המספרים ויש לו שימושים רבים, לדוגמה בצופן RSA.
המחלק המשותף המקסימלי של מספרים, המסומן , היא פעולה המקבלת שני מספרים טבעיים, ומחזירה את המספר הגדול ביותר שמחלק את שניהם.
לדוגמה, המחלק המשותף המקסימלי של 36 ו-24 הוא 12, מאחר שהמספר מחלק את שניהם ואין מספר גדול יותר בעל תכונה זאת.
תמיד יש מספר כזה כיוון שהמספר אחד מחלק כל מספר. ואכן המחלק המשותף המקסימלי של שני מספרים ראשוניים (כלומר זרים) הוא אחד.
דרך אפשרית למציאת המחלק המשותף המקסימלי היא פירוק שני המספרים לגורמים ראשוניים, והכפלת הגורמים המשותפים. בדוגמה הנ"ל, הפירוק לראשוניים של 36 הוא 2×2×3×3 ושל 24 הוא 2×2×2×3, הגורמים המשותפים הם 2, 2 ו-3, ומכפלתם היא 12. דרך זו היא אינטואיטיבית, אך אינה שימושית עבור מספרים גדולים, כי פירוק לגורמים הוא פעולה מורכבת ואין שיטה פשוטה לחישובו. אלגוריתם אוקלידס מאפשר את מציאת המחלק המשותף המקסימלי ללא פירוק לגורמים, בדרך פשוטה יחסית. למעשה, שיטות מתקדמות לפירוק לגורמים (לדוגמה אלגוריתם נפת שדה מספרים) משתמשות באלגוריתם אוקלידס.
האלגוריתם מבוסס על העיקרון הבא: הוספת כפולה של אחד המספרים למספר השני, אינה משנה את המחלק המשותף הגדול ביותר. בניסוח מתמטי, אם מספרים טבעיים אז מתקיים: .
בתכונה זו ניתן להשתמש בכיוון ההפוך – במקום להגדיל את אחד המספרים, מקטינים אותו: לכל זוג מספרים , ניתן לחשב את השארית מחלוקת ב-, כאשר . מכאן מתקבל השוויון , שבו הוחלף המספר הגדול במספר קטן יותר משני המספרים המקוריים, בלי לשנות את המחלק המשותף. אפשר להמשיך בתהליך שוב ושוב עם מספרים קטנים יותר ויותר, עד שמגיעים לזוג שאחד המספרים בו הוא 0; , ולפיכך נמצא המחלק המשותף הגדול ביותר.
באופן רקורסיבי ניתן להגדיר את האלגוריתם בצורה הבאה: לחישוב כאשר , אם b הוא 0, התוצאה היא a. אחרת, חלק את ב- ומצא את השארית ; התוצאה היא (שאותה יש לחשב בעזרת אותו אלגוריתם עצמו).
באופן כללי, ניתן להשתמש באלגוריתם בכל חוג אוקלידי. כך לדוגמה ניתן להשתמש באלגוריתם כדי למצוא את המחלק המשותף המקסימלי של שני פולינומים מעל שדה.
ראשית יש להוכיח את השוויון .
קיבלנו שמספר הוא מחלק משותף של אם ורק אם הוא מחלק משותף של . לכן קבוצת המחלקים המשותפים של הזוגות זהה, ובפרט האיבר המקסימלי שלהם זהה. מכאן .
נחשב את המחלק המשותף המקסימלי של 1071 ו-462, או :
לפתרון ניתן לתת משמעות גאומטרית כמודגם באיור: 21 הוא אורך הצלע של האריח הריבועי הגדול ביותר שמאפשר לרצף במדויק את המלבן שצלעותיו הן 1071 ו-462.
def gcd(a, b):
if b == 0: return a
return gcd(b, a % b)
מבחינת סיבוכיות חישובית, האלגוריתם יעיל. מספר הפעולות הנדרשות לביצוע אינו עולה על ( הוא יחס הזהב). על כן הסיבוכיות שלו היא לוגריתמית. ניתן להגיד שמספר הפעולות אינו עולה על פי-5 ממספר הספרות.
המקרה הגרוע ביותר (worst case) הוא כאשר מדובר בשני מספרי פיבונאצ'י עוקבים; זאת, כיוון שככל שהמנה המתקבלת בפעולות החילוק קטנה יותר, המספר קָטֵן פחות, ויש צורך ביותר פעולות. במספרי פיבונאצ'י כל המנות הן 1, ועל כן התהליך הוא הארוך ביותר. תכונה זו נתגלתה על ידי גבריאל לאמה.
אחת התכונות החשובות של המחלק המשותף המקסימלי היא שניתן להציג אותו בצורה הבאה: , כאשר שלמים.
ניתן לחשב את באמצעות אלגוריתם אוקלידס בעזרת התכונה שאם כל פעם השתמשנו ב-, אז . לפיכך, אם אנחנו יודעים בשלב מסוים איך להציג את שני המספרים בצורה (ההתחלה פשוטה: או להפך) ניתן להציב בביטוי ולהתקדם בשלבי האלגוריתם עד להצגה הרצויה.
לדוגמה, נמצא בדוגמה להלן את ההצגה של 10 כ-:
לפיכך: .
האלגוריתם המורחב שימושי בחשבון מודולרי, למשל לצורך מציאת הופכי כפלי מודולרי, עבור שני מספרים זרים.
מידת סיבוכיות האלגוריתם המורחב היא מאותו סדר גודל של הרגיל, מאחר שאין צורך לבצע איטרציות נוספות אלא רק חישובים בסיסיים.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.