Thuật toán Euclid mở rộng (Tìm UCLN)
Thuật toán Euclid mở rộng sẽ tìm USCLN d của a và b, đồng thời tìm được cả hai số nguyên x, y trong phần 2.3
Thuật toán Euclid mở rộng có thể diễn đạt bằng đệ quy như sau:
procedure ee(a, b, var x, var y);
var
x2,y2;
begin
if (a<b) then
ee(b, a, x, y)
else if (b=0) then
begin
x:=1;
y:=0;
end else
begin
ee(b, a mod b, x2, y2);
x:=y2;
y:=x2-(a div b)*y2;
end;
end;
Giải thích:
Từ 2.1, ta đã biết (a, b) = (b, r) = d
ee(a, b, var x, var y) trả về giá trị x, y sao cho ax + by = d
Dòng lệnh màu đỏ chạy thủ tục đệ quy: tìm x2, y2 sao cho:
bx2 + ry2 = d
Mặt khác:
r = a – bq
Với
r=a mod b
q=a div b
Do đó
bx2 + (a-bq)y2 = d
ay2 + b(x2 – qy2) = d
Vậy
x = y2
y = x2 – qy2
Cấu trúc đệ quy của thuật toán Euclid mở rộng cũng tương tự như thuật toán Euclid.
2.5. Một số tính chất
Giả sử
a = p1a1p2a2...pkak
b = p1b1p2b2...pkbk
Định nghĩa:
USCLN: (a, b) = p1min(a1, b1)p2min(a2, b2)...pkmin(ak, bk)
BSCNN: [a, b] = p1max(a1, b1)p2max(a2, b2)...pkmax(ak, bk)
Tính chất:
- (a, b) x [a, b] = ab
- (a, b, c) = ((a, b), c) = (a, (b, c))
- [a, b, c] = [[a, b], c] = [a, [b, c]]
Chú ý:
- Không có đẳng thức (a, b, c) [a, b, c] = abc
2.6. Bài tập
Cho dãy số nguyên dương n phần tử a1, a2, ..., an.
Yêu cầu:
Tìm dãy con liên tiếp dài nhất có USCLN > 1
Trần Chí Thu @ 10:44 30/05/2009
Số lượt xem: 1305


Các Ý Kiến