Loading [MathJax]/extensions/TeX/mathchoice.js

Thuật toán Euclid


Kỳ trước chúng ta đã học về bổ đề Bezout. Hôm nay chúng ta sẽ học về thuật toán Euclid. Thuật toán này dùng để xác định các hệ số trong đẳng thức Bezout.

Trước hết chúng ta phát biểu bổ đề Bezout. 

Bổ đề Bezout. Nếu d là ước số chung lớn nhất của hai số nguyên ab thì sẽ tồn tại hai số nguyên xy sao cho d = a ~x + b ~y.

Thuật toán Euclid mục đích đi tìm ước số chung lớn nhất d của hai số ab, và xác định hai giá trị của xy trong đẳng thức Bezout d = a ~x + b ~y.

Ý tưởng của thuật toán Euclid rất đơn giản và tự nhiên.



Đầu tiên chúng ta nói về việc đi tìm ước số chung lớn nhất của cặp số a, b.

Giả sử như a = 45, b = 155. Làm sao chúng ta tìm được ước số chung lớn nhất của cặp số này?


Có một cách làm rất tự nhiên, đó là làm nhỏ các con số lại. Chúng ta biết rằng ước số chung lớn nhất của cặp số (a,b) cũng chính là ước số chung lớn nhất của cặp số (a, b-a).

Trong ví dụ này, chúng ta có cặp số a = 45, b = 155. Chúng ta có thể làm nhỏ con số b lại bằng con số b-a = 110. Như vậy ước số chung lớn nhất của cặp số (45, 155) chính là ước số chung lớn nhất của cặp số (45, 110).

Con số b-a=110 vẫn có thể làm nhỏ lại bằng cách lấy (b - a) - a = 110-45 = 65,b - 3a = 65-45 = 20.

Cuối cùng, chúng ta có cặp số (45, 20). Tóm lại, nếu chúng ta lấy b chia cho a có số dư là r như sau b = aq + r, thì ước số chung lớn nhất của cặp số (a,b) chính là bằng ước số chung lớn nhất của cặp số nhỏ hơn (a,r).

Đây chính là mấu chốt của thuật toán Euclid.

Chúng ta bắt đầu lại từ đầu nhé. Chúng ta có 155 = 45 \times 3 + 20, do đó (45, 155) = (45, 20). Làm tiếp 45 = 20 \times 2 + 5, do đó (45, 20) = (20,5). Tiếp tục, 20 = 5 \times 4 + 0, do đó (20,5) = 5. Như vậy chúng ta đã tìm ra ước số chung lớn nhất, đó chính là 5.




Bây giờ chúng ta xem cách tìm số x, y trong đẳng thức Bezout d = a ~x + b ~y.

Bước 1. Chúng ta làm như trên để tìm ra ước số chung lớn nhất là d.

155 = 45 \times 3 + 20, 45 = 20 \times 2 + 5, 20 = 5 \times 4 + 0, do đó d=(45,155) = 5


Bước 2. Bắt đầu từ dưới lên, chúng ta lần lượt viết các phương trình b = aq + r về dạng r = b - aq (phương trình cuối cùng có số dư bằng 0 nên không cần phải viết)

d = 5 = 45 - 20 \times 2, 20 = 155 - 45 \times 3,

Bước 3. Chúng ta biến đổi d như sau

d = 5 = 45 - 20 \times 2 = 45 - (155 - 45 \times 3) \times 2 = 45 \times 7 - 155 \times 2,

Tóm lại chúng ta đã viết được d về dạng ax + by.


Chúng ta cùng làm một ví dụ khác nhé. Ví dụ a = 1000, b = 2013.

Bước 1. Dùng phép chia b = aq + r để làm nhỏ bộ số (b,a) \to (a,r)
{\bf 2013} = {\bf 1000} \times 2 + {\bf 13}, {\bf 1000} = {\bf 13} \times 76 + {\bf 12}, {\bf 13} = {\bf 12} \times 1 + {\bf 1}, {\bf 12} = {\bf 1} \times 12 + 0, do đó d=(1000,2013) = 1


Bước 2. Bắt đầu từ dưới lên, viết các phương trình về dạng r = b - aq (phương trình cuối cùng không cần viết)
d = {\bf 1} = {\bf 13} - {\bf 12} \times 1, {\bf 12} = {\bf 1000} - {\bf 13} \times 76, {\bf 13} = {\bf 2013} - {\bf 1000} \times 2, 

Bước 3. Chúng ta biến đổi d như sau

và cuối cùng chúng ta có d = {\bf 1} = {\bf 2013} \times 77 - {\bf 1000} \times 155







Bổ đề Bezout và thuật toán Euclid có nhiều ứng dụng trong việc giải các phương trình nghiệm nguyên. Chúng ta sẽ xem xét kỹ về đề tài này trong các kỳ sau. Tạm thời, chúng ta xem xét bài toán sau đây.

Bài toán. Tìm tất cả các số tự nhiên n sao cho số 2013 n có ba chữ số tận cùng là 999.


Phân tích. Ở bài toán này chúng ta cần giải phương trình sau đây 2013 n = 999 = -1 \pmod{1000}.

Nếu chúng ta tạm thời bỏ qua modulo mà chỉ quan tâm đến phương trình số thực dạng ax = b thì phương trình này có nghiệm là x = \frac{b}{a}, đấy là bởi vì chúng ta đã nhân hai vế của phương trình với số nghịch đảo của a.

Cũng tương tự như vậy, nếu chúng ta có phương trình modulo ax = b \pmod{p}, chúng ta có thể giải được nó bằng cách nhân cả hai vế với nghịch đảo của a.

Nghịch đảo của a trong modulo p chính là số c sao cho ac = 1 \pmod{p}.

Bằng cách nhân cả hai vế phương trình với c chúng ta có ac x = bc \pmod{p}.ac = 1 \pmod{p} cho nên x = bc \pmod{p}.

Bây giờ quay lại bài toán ban đầu, chúng ta phải giải phương trình 2013 n = -1 \pmod{1000}.
Chúng ta cần tìm nghịch đảo của 2013 trong modulo 1000. Chúng ta dùng đẳng thức Bezout ở trên, đó là {\bf 2013} \times 77 - {\bf 1000} \times 155 = 1.
Lấy modulo 1000, chúng ta có 2013 \times 77 = 1 \pmod{1000}.
Vậy nghịch đảo của 2013 trong modulo 1000 chính là 77.


Lời giải. Số 2013 n có ba chữ số tận cùng là 999 khi và chỉ khi 2013 n = 999 = -1 \pmod{1000}.

Từ đẳng thức Bezout {\bf 2013} \times 77 - {\bf 1000} \times 155 = 1, chúng ta có 2013 \times 77 = 1 \pmod{1000}.

Nhân cả hai vế phương trình sau với 77 2013 n = -1 \pmod{1000}, chúng ta có 2013 \times 77 n = -77 \pmod{1000}.

2013 \times 77 = 1 \pmod{1000}, chúng ta có n = -77 = 923 \pmod{1000}.

Tóm lại số n cần tìm là n = 923 + 1000 k.

Kiểm chứng, với k=0, chúng ta có n=923, và 2013 \times 923 = 1857999.





Chúng ta tạm dừng chủ đề về bổ đề Bezout và thuật toán Euclid ở đây. Sau này khi có dịp chúng ta sẽ xem xét kỹ thêm về ứng dụng của bổ đề Bezout và thuật toán Euclid.

Hẹn gặp lại các bạn vào kỳ sau.




Bài tập về nhà.

1. Dùng thuật toán Euclid để thiết lập đẳng thức Bezout cho hai số 2012999.

2. Giải phương trình nghiệm nguyên sau đây 2012 a + 999 b = 5.

3. Giải phương trình nghiệm nguyên sau đây 2012 x = 999 y + 99 z + 9.