אלגוריתם אוקלידיאני: GCD (הגדול ביותר מחלק משותף) מוסבר עם דוגמאות C ++ ו- Java

בנושא זה עליכם לדעת קודם על Greatest Common Divisor (GCD) ועל פעולת ה- MOD.

המחלק המשותף הגדול ביותר (GCD)

ה- GCD של שני מספרים שלמים או יותר הוא המספר השלם הגדול ביותר שמחלק את כל המספרים השלמים כך ששארם יהיה אפס.

דוגמא-

GCD של 20, 30 = 10   (10 הוא המספר הגדול ביותר שמחלק 20 ו- 30 עם שארית כ- 0)

GCD של 42, 120, 285 = 3   (3 הוא המספר הגדול ביותר שמחלק 42, 120 ו- 285 עם שארית כ- 0)

מבצע "mod"

פעולת המוד נותנת לך את השאר כאשר מחולקים שני מספרים שלמים חיוביים. אנו כותבים זאת כדלקמן-

A mod B = R

פירוש הדבר, שחלוקת A ב- B נותנת לך את שארית R, זה שונה מפעולת החלוקה שלך שנותנת לך את המנה.

דוגמא-

7 mod 2 = 1   (חלוקה 7 על 2 נותנת את השאר 1)

42 mod 7 = 0   (חלוקה 42 על 7 נותנת את השאר 0)

בעזרת שני המושגים הנ"ל מובנים תוכלו להבין בקלות את האלגוריתם האוקלידי.

אלגוריתם אוקלידי עבור המחלק הגדול ביותר (GCD)

האלגוריתם האוקלידי מוצא את ה- GCD של 2 המספרים.

תוכלו להבין טוב יותר את האלגוריתם הזה על ידי כך שתראו אותו בפעולה. בהנחה שברצונך לחשב את ה- GCD של 1220 ו- 516, ניתן להחיל את האלגוריתם האוקלידי-

בהנחה שברצונך לחשב את ה- GCD של 1220 ו- 516, מאפשר להחיל את האלגוריתם האוקלידי-

דוגמא אוקלידית

קוד פסאודו של האלגוריתם-

שלב 1:   לאפשר   a, b  להיות שני המספרים

שלב 2:  a mod b = R

שלב 3:   תן   a = b  ו  b = R

שלב 4:   חזור על שלבים 2 ו -3 עד   a mod b  שהוא גדול מ- 0

שלב 5:   GCD = b

שלב 6: סיום

קוד JavaScript לביצוע GCD-

function gcd(a, b) { var R; while ((a % b) > 0) { R = a % b; a = b; b = R; } return b; } 

קוד JavaScript לביצוע GCD באמצעות רקורסיה-

function gcd(a, b) { if (b == 0) return a; else return gcd(b, (a % b)); } 

קוד C לביצוע GCD באמצעות רקורסיה

int gcd(int a, int b) { // Everything divides 0 if (a == 0) return b; if (b == 0) return a; // base case if (a == b) return a; // a is greater if (a > b) return gcd(a-b, b); return gcd(a, b-a); } 

קוד C ++ לביצוע GCD-

int gcd(int a,int b) { int R; while ((a % b) > 0) { R = a % b; a = b; b = R; } return b; } 

קוד פייתון לביצוע GCD באמצעות רקורסיה

def gcd(a, b): if b == 0: return a: else: return gcd(b, (a % b)) 

קוד Java לביצוע GCD באמצעות Recursion

static int gcd(int a, int b) { if(b == 0) { return a; } return gcd(b, a % b); } 

אתה יכול גם להשתמש באלגוריתם האוקלידי כדי למצוא GCD של יותר משני מספרים. מכיוון ש- GCD הוא אסוציאטיבי, הפעולה הבאה תקפה-  GCD(a,b,c) == GCD(GCD(a,b), c)

חשב את ה- GCD של שני המספרים הראשונים, ואז מצא את ה- GCD של התוצאה ואת המספר הבא. דוגמא-  GCD(203,91,77) == GCD(GCD(203,91),77) == GCD(7, 77) == 7

אתה יכול למצוא GCD של   n  מספרים באותו אופן.

מהו האלגוריתם האוקלידי המורחב?

זהו הרחבה של האלגוריתם האוקלידי. זה גם מחשב את המקדמים x, y כך ש

ax + by = gcd (a, b)

x ו- y ידועים גם כמקדמים לזהותו של בזוט.

קוד c עבור אלגוריתם אוקלידי מורחב

struct Triplet{ int gcd; int x; int y; }; Triplet gcdExtendedEuclid(int a,int b){ //Base Case if(b==0){ Triplet myAns; myAns.gcd = a; myAns.x = 1; myAns.y = 0; return myAns; } Triplet smallAns = gcdExtendedEuclid(b,a%b); //Extended euclid says Triplet myAns; myAns.gcd = smallAns.gcd; myAns.x = smallAns.y; myAns.y = (smallAns.x - ((a/b)*(smallAns.y))); return myAns; }