Tìm ước chung lớn nhất bằng thuật toán euclid năm 2024

Ước chung lớn nhất (GCD - Greatest Common Divisor) của 2 số nguyên \(a\) và \(b\) là số nguyên lớn nhất \(d\) thỏa mãn cả \(a\) và \(b\) đều chia hết cho \(d\).

Thuật toán trừ dần

Mã nguồn (C):

int gcd(int a, int b) {
    while (a != b) {
        if (a > b) a = a - b;
        else b = b - a;
    }
    return a;
}

Thuật toán Euclide

Công thức

Công thức Euclide để tính ước chung lớn nhất:

\[gcd(a, 0) = a\] \[gcd(a, b) = gcd(b, a \bmod b)\]

Trong đó \(a \bmod b\) là số dư khi chi \(a\) cho \(b\).

Cài đặt đệ qui (C)

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

Cài đặt không đệ qui (C)

int gcd(int a, int b) {
    int tmp;
    while(b != 0) {
        tmp = a % b;
        a = b;
        b = tmp;
    }
    return a;
}

Thuật toán nhị phân (Binary GCD Algorithm)

Thuật toán gồm các bước như sau:

  • Nếu a = b thì gcd(a, b) = a = b.
  • gcd(0, v) = v, gcd(u, 0) = u.
  • Nếu cả uv đều chẵn thì

    int gcd(int a, int b) {

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

    0.
  • Nếu u chẵn và v lẻ thì

    int gcd(int a, int b) {

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

    3. Tương tự, nếu u lẻ và v chẵn thì

    int gcd(int a, int b) {

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

    6.
  • Nếu cả uv đều lẻ và

    int gcd(int a, int b) {

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

    9 thì

    int gcd(int a, int b) {

    int tmp;  
    while(b != 0) {  
        tmp = a % b;  
        a = b;  
        b = tmp;  
    }  
    return a;  
    
    }

    0. Và ngược lại.
  • Lặp lại các bước trên.

Độ phức tạp : \(O(\log(\max(u, v))^2)\)

Cài đặt đệ qui (C):

int gcd(int a, int b) {
    if (a == b) return a;
    else if (a == 0 || b == 0) return a | b;
    else if (!(a&1) && !(b&1)) return gcd(a>>1, b>>1)<<1;
    else if (!(a&1) && b&1) return gcd(a>>1, b);
    else if (a&1 && !(b&1)) return gcd(a, b>>1);
    else if (a > b) return gcd((a-b)/2, b);
    else return gcd((b-a)/2, a);
}

Làm sao để tìm ước chung lớn nhất?

Bước 1: Phân tích mỗi số ra thừa số nguyên tố. Bước 2: Chọn ra các thừa số nguyên tố chung. Bước 3: Lập tích các tích thừa số đã chọn, mỗi thừa số lấy với số mũ nhỏ nhất của nó. Tích đó là ƯCLN phải tìm.nullCách tìm ước chung lớn nhất (ƯCLN), bội chung nhỏ nhất (BCNN)quantrimang.com › cuoc-song › cach-tim-uoc-chung-lon-nhat-uscln-185430null

Ước chung lớn nhất và bội chung nhỏ nhất là gì?

- ƯCLN của hai hay nhiều số là số lớn nhất trong tập hợp các ước chung của chúng. - Nếu ƯCLN(a,b)=1 thì a và b là hai số nguyên tố cùng nhau. - BCNN của hai hay nhiều số là số nhỏ nhất khác 0 trong tập hợp các bội chung của chúng. - Số lượng các ước của một số: Giả sử số tự nhiên A được phân tích ra TSNT là axbycz…nullChuyên đề toán 6 - Trường THCS Xuân Thượngthcsxuanthuong.namdinh.edu.vn › chuyen-de › chuyen-de-toan-6null

Thuật toán Euclid để tính ước chung lớn nhất GCD của hai số nguyên dựa trên nguyên tắc gì?

Giải thuật Euclid dựa trên nguyên tắc là ước chung lớn nhất của hai số nguyên không thay đổi khi thay số lớn hơn bằng hiệu của nó với số nhỏ hơn. Chẳng hạn, 21 là ƯCLN của 252 và 105 (vì 252 = 21 × 12 và 105 = 21 × 5) và cũng là ƯCLN của 105 và 252 − 105 = 147.nullGiải thuật Euclid – Wikipedia tiếng Việtvi.wikipedia.org › wiki › Giải_thuật_Euclidnull

Ước chung của hai số là gì?

Số tự nhiên n được gọi là ước chung của hai số a và b nếu n vừa là ước của a vừa là ước của b. Số lớn nhất trong các ước chung của a và b được gọi là ước chung lớn nhất của a và b.nullƯớc chung lớn nhất là gì? Cách tìm ước chung lớn nhất Toán lớp 6luatminhkhue.vn › uoc-chung-lon-nhat-la-ginull