- xây dựng các chương trình hay chương trình con
thực hiện thuật toán.
THẢO LUẬN NHÓM SỐ 3
Thời gian thực hiện: 15 phút
Thời gian thực hiện: 15 phút..
Mục tiêu cần đạt:
Mục tiêu cần đạt:
- thảo luận và tìm ra thuật toán cho các bài toán từ
- thảo luận và tìm ra thuật toán cho các bài toán từ
phiếu học tập số 3.
phiếu học tập số 3.
- cả nhóm cùng thiết kế và mô tả lại các thuật toán.
III. Ướ ố ộ ốc s , b i s .
III. Ướ ố ộ ốc s , b i s .
Tìm ước chung lớn nhất của hai số nguyên dương a, b:
III.3.2. Thuật toán Euclid dạng đệ quy và sự mở rộng. Thuật toán Euclid tìm UCLN của a và b, viết
dưới dạng đệ quy: function GCD(a, b : longint) : longint; begin if (a<b) then GCD := GCD(b, a) else if (b=0) then GCD := a else GCD := GCD(b, a mod b); end;
III. Ướ ố ộ ốc s , b i s .
III. Ướ ố ộ ốc s , b i s .
Tìm ước chung lớn nhất của hai số nguyên dương a, b:
III.3.2. Thuật toán Euclid dạng đệ quy và sự mở rộng.
Nếu UCLN(a, b) = d, thì tồn tại hai số nguyên x, y sao cho ax + by = d (*)
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 công thức (*)
Thuật toán Euclid mở rộng có thể diễn đạt bằng đệ quy như sau:
III. Ướ ố ộ ốc s , b i s .
III. Ướ ố ộ ốc s , b i s .
Tìm ước chung lớn nhất của hai số nguyên dương a, b:
III.3.2. Thuật toán Euclid dạng đệ quy và sự mở rộng.
procedure
procedure ee(a, b : longint; var x, y : longint); ee(a, b : longint; var x, y : longint);
varvar x2, y2 : longint; x2, y2 : longint;
begin
begin
if
if (a<b) (a<b) thenthen ee(b, a, x, y) ee(b, a, x, y)
else
else ifif (b=0) (b=0) thenthen beginbegin
x := 1; y := 0; x := 1; y := 0;
endendelseelse beginbegin
ee(b, a mod b, x2, y2); ee(b, a mod b, x2, y2);
x := y2; y := x2 - (a div b) * y2; x := y2; y := x2 - (a div b) * y2;
endend; ;
end
end; ;
Giải thích:
- Từ III.3.1, ta đã biết UCLN(a, b) = UCLN(b, r) = d UCLN(b, r) = d