kamma@actcom.co.il דצמבר, 23. מבוא יהיו a ו- b שני מספרים טבעיים כלשהם. נגדיר את המחלק המשותף המרבי של a ו- b להיות המספר הטבעי המרבי,, ab, cd שמחלק הן את a והן את b. מסתבר שניתן להציג את, ab cd ( cd ( ab, a x+ b y :b ו- a. xy, כצרוף של כאשר לפרוק הזה קיימים שימושים בתחומים שונים של מדעי המחשב, וביניהם תחום אבטחת המידע. במאמר זה נבנה שני אלגוריתמים למציאת הפירוק הזה. תחילה נציג את האלגוריתם הבסיסי של אוקלידס למציאת המחלק המשותף המרבי. לאחר מכן נדגים כיצד אפשר לבנות אלגוריתם רקורסיבי שמוצא את הפרוק (. אז נבנה אלגוריתם איטרטיבי שמוצא פרוק זה ולבסוף נממש אותו ב- C. 2. האלגוריתם הבסיסי של אוקלידס האלגוריתם הבסיסי של אוקלידס מסתמך על האבחנה הבאה: a qb u q s ( u qs a qb + qs + u ( qs + u. ו- b b אזי: a אם. a q b+ נסמן ולכן מחלק גם את אם ו- b אזי: ואת a.. a כלומר, ולכן מחלק גם את ו- b אם ורק אם a mod b ( כעת נתבונן בסדרה טענה 2. המוגדרת כך: ( ( a b cd, cd, + + לכל שעבורו מוגדר מתקיים: הטענה מתקיימת באופן ריק. עבור /5
+ כעת נניח שהטענה נכונה עבור מסויים ו- ו- מוגדר. כבר הוכחנו שכל המחלקים המשותפים ל-. mod לפיכך, המחלק המשותף המרבי + ( ( ( a b cd, cd, cd, + זהים לכל המחלקים המשותפים ל- ו- של שני הזוגות זהה, ומתקיים: והטענה הוכחה באינדוקציה. טענה 2.2. קיים שעבורו נוכיח שהחל מהמקום השני הסדרה, הסדרה יורדת. לשם כך נשים לב שאם עבור מקום מסויים בסדרה, נאמר, מתקיים: 2 אזי מתקיים: 2 mod < מכיוון שאפילו אם: < אזי: 2 mod ואז כבר מתקיים: > 2 והסדרה מונוטונית יורדת מהאבר השני. מכיוון שכל אברי הסדרה שלמים טבעיים, הרי שלאחר +b +a אברים לכל היותר נגיע ל-, מש"ל. משתי הטענות האחרונות נוכל לבנות בקלות את הגרסה הרקורסיבית האלגוריתם הבסיסי של אוקלידס: BASICRECURSIVEGCD: ( 2, if 2 the etu a BASICRECURSIVEGCD, mod 3 else etu ( 2 ( כאשר בכל קריאה רקורסיבית הוא מתבונן בשני אברים האלגוריתם מתחקה אחר הסדרה עוקבים. לפי טענה 2. לכל הזוגות הללו יש את אותו המחלק המשותף המרבי. מכיוון שהזוג האחרון, ( שהמחלק המשותף המקסימלי שלו הוא, הרי שהאלגוריתם נכון חלקית. 2 הוא 2 נכונות מלאה נובעת מטענה 2.2 שלפיה בשלב מסויים והאלגוריתם יעצור. לפני תום הסעיף נציג גם את הגרסה האיטרטיבית של האלגוריתם הבסיסי של אוקלידס. האלגוריתם משתמש בוקטור על מנת לשמור את אברי הסדרה. בהמשך נציג מימוש בעל סיבוכיות מקום קבועה. 2/5
BASICITERATIVEGCD: ( ab, [ ] a [] 2 k 3 while [ k] do b 4 k k + k k 2mod k 5 [ ] [ ] [ ] 6 etu [ k ] הוכחת הנכונות מושארת כתרגיל לקורא. 3. הרחבת האלגוריתם הרקורסיבי על מנת לבנות גרסה רקורסיבית שמוצאת גם את הפרוק (, נניח שנתונה לנו פונקציה x, f :,, שמוצאת את הפרוק: y x+ y בגרסה הרקורסיבית של האלגוריתם הבסיסי השתמשנו בקריאה: BASICRECURSIVEGCD, mod 2 ( xy,, f(, mod x+ y 2 ( xy,, f(, ( 2 q+ x+ y qx + y + x x qx+ y y x x y y x qy ( ( x y RECURSIVEGCD:,,, if 2 2 the etu 3 else,,, f נקבל את הקריאה: אם נחליף קריאה זו בקריאה ל- ואנו רוצים לבנות ממנה אם נעזר בהגדרה הסדרה x ו- y שיקיימו: נקבל שאנו רוצים שאם יתקיים: 4 ( xy,, cd (, mod ( אז נוכל למצוא בחירה אחת של ולכן נבחר: x ו- y שיקיימו: x ו- y היא כזו שמקיימת: 2 אם נזכור ש- q נקבל את האלגוריתם הרקורסיבי הבא: 2 5 etu (, y, x y 2 / 3/5
טענה 3. לכל זוג מספרים טבעיים, האלגוריתם מחזיר שלשה המקיימת את (. מכיוון שבקרת הזרימה של האלגוריתם זהה לבקרת הזרימה של הגרסה הרקורסיבית של האלגוריתם של אוקלידס האלגוריתם שלנו תמיד יעצור ויחזיר כ- את המחלק המשותף המרבי. נותר רק להוכיח ש- x ו- y מקיימים את (. נוכיח זאת באינדוקציה על עומק הרקורסיה. + 2 ( xy,, עבור עומק רקורסיה תנאי הבקרה מתקיים, ולכן ( מתקיים באופן ריק: עבור עומק רקורסיה האינדוקציה מקיימת: +, תנאי הבקרה אינו מתקיים ומחושבת השלשה שלפי הנחת x + y y x y, x y גוררת: 2 / לפי הדיון שקדם לאלגוריתם נובע מכך שהבחירה x+ y 2 ובכך הטענה הוכחה באינדוקציה. (, x y שתקיים: (2 ax + by 4. הרחבת האלגוריתם האיטרטיבי על מנת להרחיב את הגרסה האיטרטיבית של האלגוריתם, נגדיר סדרת זוגות אם נצליח לשמור על תכונה זו במשך כל ריצת האלגוריתם, הרי שבסוף ריצתו יתקיים: ax + by ( xy,, (, x, y מכיוון שהראנו שאז יתקיים הרי שהשלשה תקיים את פרוק mod q+ 2 (.( ננסה לאפיין את סדרת הזוגות הזו באמצעות אפיון הסדרה. עבור, מתקיים: a a + b b a + b ( x, y (, ( x, y (, ax2 + by2 ax + by q + a x qx + b y qy 2 x x qx y y 2 qx ולכן פשוט להגדיר: כעת עבור 2 ולכן קיים מתקיים: שלם כך שיתקיים: אם נציב את תכונה (2 בשוויון האחרון נקבל: q ולכן פשוט להגדיר: 4/5
ITERATIVEGCD: ( ab, (, xy, ( x[, ] y[ ] (, [] [] 2 [ ] a, [] b ( x, y (, 3 k 4 while k do 5 k k + 6 k 2 q, k k2 mod k k x, y x qx, y qy 7 ( k k ( k2 k k2 k 8 etu (, x, y k k k מכאן האלגוריתם האיטרטיבי מיידי : ab, טענה 4. לכל זוג מספרים טבעיים האלגוריתם מחזיר שלשה המקיימת את (. נכונות הערך המוחזר ועצירת האלגוריתם כבר הוכחו באלגוריתם הבסיסי. על מנת להשלים את ההוכחה נשים לב שהטענה השמורה :(ivaiat i [] axi [] + byi [], i k, k b, ( a השלשה cd, k מתקיימת בכל פעם שמגיעים לשורה 4. מכיוון שבסוף הלולאה מתקיים המוחזרת מקיימת את פרוק (. כמו שהובטח בסעיף נביא מימוש של האלגוריתם בסיבוכיות מקום קבועה. נשים לב שבכל איטרציה x,. לשם כך y,( של הלולאה דרושים לנו בסך הכל שני הערכים הקודמים של הסדרות יספיק לנו מימוש מעגלי של המערך בתוך מערך בגודל 3: it iteativegcd (it a, it b, it *m, it * { it [3], x[3], y[3], q, k; [] a, [] b; x[], y[] ; x[], y[] ; fo (k ; [k % 3]; { k++; } q [(k-2 % 3] / [(k- % 3]; [k % 3] [(k-2 % 3] % [(k- % 3]; x[k % 3] x[(k-2 % 3] - q*x[(k- % 3]; y[k % 3] y[(k-2 % 3] - q*y[(k- % 3]; *m x[(k- % 3]; * y[(k- % 3]; etu [(k- % 3]; } בשפה התומכת באריתמטיקת מודולו (למשל עדה לא היינו נדרשים לשום שינוי באלגוריתם למעט שינוי הטיפוס של k לטיפוס מודולו ושינוי גדלי הוקטורים. 5/5