You are on page 1of 2

Thuật toán Euclide:

Yêu cầu: tìm gcd(a, b).

Đặt a0 = a, a1 = b

Nhận xét:

gcd(a0, a1) = gcd(a1, a2) = gcd(a2, a3) = …. = gcd(ar, ar+1=0) = ar

với ai+1 = ai-1 – qiai ( ai-1 / ai = qi (dư ai+1))

Ł Đây là cơ sở của thuật toán Euclide

Ví dụ:

a = 84, b = 36, cần tính gcd(a, b)

Đặt a0 = a= 85, a1 = b = 36

Để tìm ar, lập bảng tương tự như sau:

q1 q2 … qr

a0 a1 a2 … ar ar+1 = 0

Cụ thể, với ví dụ này:

(nhớ công thức qi = ai-1/ ai và ai+1 = ai-1 – qiai)

2 3

84 36 12 0

gcd(84, 76) = 12

Thuật toán Euclide mở rộng (Bezout):

Đặt Xi, Yi sao cho: a0Xi + a1Yi = ai

Vậy việc giải x, y trong phương trình ax + by = gcd(a, b) tương ứng với việc tìm (Xr, Yr), vì: a0Xr
+ a1Yr = ar (nhớ lại là a0=a, a1=b, ar=gcd(a, b))

Để ý chút thì thấy a0.1 + a1 = a0 => X0 = 1, Y0 = 0

a0.0 + a1.1 = a1 => X1 = 0, Y1 = 1


Nhưng Xr = ?, Yr = ?. Vấn đề là tính (Xr, Yr) thế nào :D.

Do đó người ta mới ráng tìm công thức truy hồi, sao cho tính được Xr, Yr từ các Xi, Yi trước đó.

Do: ai+1 = ai-1 – qiai = (a0Xi-1+a1Yi-1) – qi(a0Xi+a1Yi) = a0(Xi-1-qiXi) + a1(Yi-1-qiYi)

mà: ai+1 = a0Xi+1 + a1Yi+1

suy ra: Xi+1 = Xi-1-qiXi và Yi+1=Yi-1-qiYi (*)

Vậy là đủ công cụ để tính Xr, Yr: dùng công thức (*).

Ví dụ:

a = 84, b = 36, cần tính gcd(a, b) và tìm x, y sao cho: ax + by = 84x + 36y = gcd(84,36) = 12

Đặt a0 = a= 85, a1 = b = 36

Để tìm ar, Xr, Yr, lập bảng tương tự như sau (bảng tương tự trong thuật toán Euclide nhưng
thêm 2 dòng tương ứng với các giá trị Xi, Yi):

q1 q2 … qr

a0 a1 a2 … ar ar+1 = 0

X0 X1 X2 … Xr

Y0 Y1 Y2 … Yr

Cụ thể, với ví dụ này:

(nhớ công thức qi = ai-1/ ai ; ai+1 = ai-1 – qiai ; Xi+1 = Xi-1-qiXi và Yi+1=Yi-1-qiYi )

2 3

84 36 12 0

1 0 1

0 1 -2

gcd(84, 76) = 12

và Xr = 1, Yr = -2 (kiểm lại : 1. 84 + (-2). 36 = 12)

You might also like