Thuật toán nhân 2 số tự nhiên của người ấn độ
Friday, April 20, 2007 12:53:27 PM
Ngày xưa khi người Ấn Độ đi buôn bán sang các nước khác, họ đã biết cách tính toán rất nhanh bằng những tư duy rất tự nhiên, những tư duy đó đã góp phần không nhỏ cho nền toán học nhân loại, ở bài viết này xin nói đến một cách tư duy rất đời thường đó của họ. Nhân hai số tự nhiên, xin nói thêm là ngày xưa người Ả Rập cũng đi buôn bán rất nhiều nơi, khi họ tính tiền ví dụ có 66 miếng vải mỗi miếng giá 25 đồng thì họ cứ lấy các viên sỏi rồi ngồi đếm, khi buôn bán với người Ấn Độ thì họ tính tiền rất nhanh, chỉ cần ngồi lấy cái bút rẹt rẹt phát là xong.
Thằng Ả Rập thấy vậy liền học mót rồi về truyền bá nói đó là cách tính của họ nhưng thật ra đó là cách tính của người ấn độ:
Tư duy của họ như thế này:
Có một thùng nước rất to và có một cái gáo nhỏ 25 lít, nếu múc 66 gáo thì đầy cái thùng lớn, như vậy người múc nước họ mơi nghĩ rằng lấy cái gáo lớn gấp đôi (50 lít) thì chỉ cần 33 lần là đầy.
Họ đã nghĩ được như vậy thì sao không lấy cái gáo gấp 4 lần (100 lít) thì múc 16 lần sẽ đầy nhưng mà nếu vậy thì ăn gian mất một gáo 50 lít rồi, khỏi cần suy nghĩ, người đó sẽ múc một gáo 50 lít bỏ vào trước.
Tiếp tục như vậy đã có cái gáo gấp 4 lần thì việc gì không tìm cái gáo gấp 8 lần (200 lít) để chỉ cần múc 8 lần là đây,
cứ như vậy nếu cái gáo gấp 16 lần (400 lít) thì chỉ cần múc 4 lần là đầy,
cái gáo gấp 32 lần (800 lít) chỉ cần múc 2 lần là đầy, cái gáo gấp 64 (1600 lít) thì múc 1 lần là đầy,
cái gáo gấp 128 lần (3200 lít) thì múc 0 lần là đầy, nếu như vậy thì ăn gian rồi vì đến đây không thể thực hiện được mà phải múc 1 gáo 1600 lít bỏ vào thùng đã.
Để ý xem trong thùng chúng ta đã có lượng nước = gáo 50 lít rồi giờ cộng thêm gáo 1600 lít nữa là 1650 lít là đầy thùng.
Từ ý tưởng đó chúng ta xây dựng cách nhân 2 số tự nhiên bất kỳ x*y như sau, chia x cho 2 và nhân y cho 2 quá trình trên lặp lại đến khi không chia được x nữa thì dừng (nên nhớ x, y thuộc N), chỗ nào mà x lẻ thì sẽ cộng y tương ứng vào như vậy sẽ ra kết qủa.
Z= x * y
66 * 25
-> 33 * 50
16 * 100
8 * 200
4 * 400
2 * 800
-> 1 * 1600
0 * 3200
Z = 50 + 1600
KISS (Keep It Stupid Simple): Đơn giản đến mức tối giản





