Menu
×

Được chứng nhận

Ghi lại kiến ​​thức của bạn

Đăng nhập Đăng ký

Tạo Tài khoản Example.com.vn miễn phí để cải thiện trải nghiệm học tập của bạn

Người tìm đường và việc học của tôi

Theo dõi tiến độ học tập của bạn tại Example.com.vn và thu thập phần thưởng

Nâng cấp

Trở thành người dùng PLUS và mở khóa các tính năng mạnh mẽ (không có quảng cáo, lưu trữ, hỗ trợ, ..)

Bắt đầu từ đâu

Bạn không chắc chắn muốn bắt đầu từ đâu? Đi theo con đường được hướng dẫn của chúng tôi

Trình chỉnh sửa mã (Dùng thử)

Với trình chỉnh sửa mã trực tuyến của chúng tôi, bạn có thể chỉnh sửa mã và xem kết quả trong trình duyệt của mình

Video

Tìm hiểu những điều cơ bản về HTML qua video hướng dẫn thú vị và hấp dẫn

Mẫu

Chúng tôi đã tạo một loạt mẫu trang web đáp ứng mà bạn có thể sử dụng - miễn phí!

Web hosting

Lưu trữ trang web của riêng bạn và chia sẻ nó với mọi người với Example.com.vn Spaces

Tạo một máy chủ

Tạo máy chủ của riêng bạn bằng Python, PHP, React.js, Node.js, Java, C#, v.v.

Làm thế nào để

Bộ sưu tập lớn các đoạn mã cho HTML, CSS và JavaScript

Khung CSS

Xây dựng các trang web nhanh và phản hồi bằng cách sử dụng khung W3.CSS miễn phí của chúng tôi

Thống kê trình duyệt

Đọc xu hướng dài hạn của việc sử dụng trình duyệt

Tốc độ gõ

Kiểm tra tốc độ đánh máy của bạn

Đào tạo AWS

Tìm hiểu dịch vụ web của Amazon

Bộ chọn màu

Sử dụng công cụ chọn màu của chúng tôi để tìm các màu RGB, HEX và HSL khác nhau. Bánh xe màu hình tròn thể hiện sự chuyển màu trong quang phổ

Trò chơi mã

Trò chơi mã hóa W3Schools! Giúp linh miêu thu thập nón thông Logo Lynx

Đặt mục tiêu

Nhận hành trình học tập được cá nhân hóa dựa trên các kỹ năng và mục tiêu hiện tại của bạn

Bản tin

Tham gia bản tin của chúng tôi và có quyền truy cập vào nội dung độc quyền mỗi tháng

Việc làm

Thuê những tài năng công nghệ hàng đầu. Hợp lý hóa quy trình tuyển dụng của bạn để có đội ngũ phù hợp hoàn hảo

Lớp học

Hãy liên hệ để sử dụng Example.com.vn Plus và các chứng chỉ với tư cách là một tổ chức giáo dục

×
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP CÁCH W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS AN NINH MẠNG DỮ LIỆU KHOA HỌC

Hướng dẫn DSA

DSA TRANG CHỦ DSA Giới thiệu Thuật toán đơn giản DSA

Mảng

Mảng DSA Sắp xếp bong bóng DSA Sắp xếp lựa chọn DSA Sắp xếp chèn DSA Sắp xếp nhanh DSA Sắp xếp đếm DSA Sắp xếp cơ số DSA Sắp xếp hợp nhất DSA Tìm kiếm tuyến tính DSA Tìm kiếm nhị phân DSA

Danh sách liên kết

Danh sách liên kết DSA Danh sách liên kết DSA trong bộ nhớ Danh sách liên kết DSA Các loại Danh sách liên kết Hoạt động

Ngăn xếp & hàng đợi

Ngăn xếp DSA Hàng đợi DSA

Bảng băm

Bảng băm DSA Bộ hàm băm DSA Bản đồ hàm băm DSA

Cây

Cây DSA Cây nhị phân DSA DSA Traversal đặt hàng trước DSA Traversal theo thứ tự DSA Traversal DSA sau thực hiện mảng DSA Cây tìm kiếm nhị phân DSA Cây AVL DSA

Đồ thị

Đồ thị DSA Thực hiện đồ thị Đồ thị DSA Phát hiện chu trình DSA truyền tải

Con đường ngắn nhất

Đường đi ngắn nhất DSA DSA Bellman-Ford của DSA Dijkstra

Cây bao trùm tối thiểu

Cây khung tối thiểu DSA Prim's DSA Kruskal's

Lưu lượng cực đại

DSA Lưu lượng tối đa DSA Ford-Fulkerson DSA Edmonds-Karp

Độ phức tạp thời gian

Giới thiệu Sắp xếp bong bóng Lựa chọn Sắp xếp Chèn Sắp xếp Sắp xếp nhanh Đếm Sắp xếp Cơ số Sắp xếp Hợp nhất Sắp xếp Tìm kiếm tuyến tính Tìm kiếm nhị phân

Tham chiếu DSA

Thuật toán Euclide DSA Thuật toán tham lam DSA Ghi nhớ DSA DSA Người bán hàng du lịch

Ví dụ về DSA

Ví dụ về DSA Bài tập DSA Câu hỏi DSA Chứng chỉ DSA

Thuật toán Euclide

Được đặt theo tên nhà toán học Hy Lạp cổ đại Euclid, thuật toán Euclide là thuật toán không tầm thường lâu đời nhất được biết đến, được mô tả trong cuốn sách nổi tiếng "Các phần tử" của Euclid từ năm 300 trước Công nguyên.

Thuật toán Euclide

Thuật toán Euclide tìm ước số chung lớn nhất (gcd) của hai số \(a\) và \(b\).

Ước chung lớn nhất là số lớn nhất chia cả \(a\) và \(b\) mà không để lại số dư.

Tìm ước chung lớn nhất bằng phép chia.

Kết quả:

{{ msgDone }}

Tính toán

Thuật toán sử dụng phép chia có số dư. Phần còn lại của bước trước sẽ được sử dụng để thiết lập phép tính ở bước tiếp theo.

Làm thế nào nó hoạt động:

  1. Bắt đầu với hai số ban đầu \(a\) và \(b\).
  2. Thực hiện phép chia có số dư: \(a=q_0 \cdot b + r_0\)
  3. Sử dụng phần dư (\(r_0\)) và số chia (\(b\)) từ phép tính cuối cùng để thiết lập phép tính tiếp theo: \(b=q_1 \cdot r_0 + r_1\)
  4. Lặp lại bước 2 và 3 cho đến khi phần còn lại là \(0\).
  5. Số dư cuối cùng thứ hai được tính là ước chung lớn nhất.

Tiếp tục đọc để biết thuật toán Euclide có thể được thực hiện bằng tay như thế nào, bằng cách lập trình, cũng như hiểu cách thức và lý do thuật toán thực sự hoạt động.


Thuật ngữ toán học

Dưới đây là những từ dùng để mô tả Thuật toán Euclide mà bạn cần biết để hiểu những lời giải thích trên trang này.

Số chia: Một số chúng ta có thể dùng để chia một số cho mà không để lại số dư. Chúng ta nói rằng 3 là ước của 6 vì \(6/3=2\), không để lại số dư (số dư là 0).

Phần dư: Phần còn lại sau khi chia một số với một số khác. Chia 7 cho 3 được 2, dư 1. (Vậy 3 không phải là ước của 7.)

Ước chung: Đối với các số \(a\) và \(b\), ước số chung là số có thể chia cả \(a\) và \(b\) mà không để lại số dư. Ước chung của 18 và 12 là 2, 3 và 6, vì cả 18 và 12 đều có thể chia hết cho 2, 3 và 6 mà không có số dư.

Ước chung lớn nhất: Ước chung lớn nhất. Ước chung lớn nhất của 18 và 12 là 6 vì đó là ước chung lớn nhất của 2, 3 và 6.

Ước chung lớn nhất được sử dụng trong lĩnh vực toán học của Lý thuyết số và trong mật mã để mã hóa tin nhắn.

Lưu ý: Tất cả các số được thuật toán Euclide sử dụng đều là số nguyên.


Chạy qua thủ công

Để hiểu cách hoạt động của thuật toán Euclide và viết mã cho nó, trước tiên chúng ta hãy chạy thủ công để tìm ước chung lớn nhất của \(120\) và \(25\).

Để làm điều này, chúng tôi sử dụng phép chia với số dư.

Bước 1: Chúng ta bắt đầu chia \(120\) cho \(25\):

\[ \begin{equation} \begin{aligned} 120 & = 4 \cdot 25 + 20 \end{aligned} \end{equation} \]

Chúng ta có thể nhét \(25\) vào trong \(120\) bao nhiêu lần? Đó là \(4\) lần, phải không? \(4 \cdot 25\) là \(100\). Chúng ta lấy phần còn lại \(20\) bằng cách trừ \(100\) từ \(120\).

Bước 2: Ta dùng số dư \(20\) ở bước tiếp theo để chia \(25\):

\[ \begin{equation} \begin{aligned} 25 & = 1 \cdot 20 + 5 \end{aligned} \end{equation} \]

Chúng ta có thể nhét \(20\) vào bên trong \(25\) một lần. Chúng ta lấy phần còn lại \(5\) bằng cách trừ \(20\) từ \(25\).

Bước 3: Trong phép tính tiếp theo chúng ta chia \(20\) cho số dư trước đó \(5\):

\[ \begin{equation} \begin{aligned} 20 & = 4 \cdot 5 + 0 \end{aligned} \end{equation} \]

Chúng tôi nhận được \(0\) là phần còn lại và điều đó có nghĩa là chúng tôi đã hoàn tất việc tính toán.

Ước chung lớn nhất của \(120\) và \(25\) là \(5\).


Thực hiện thuật toán Euclide

Để tìm ước chung lớn nhất bằng phép chia, ta tiếp tục chạy thuật toán cho đến khi số dư được tính là \(0\).

Điều này cũng giống như việc nói rằng chúng ta tiếp tục chạy thuật toán miễn là \(b\) không phải là \(0\). Đó là lý do tại sao b != 0 là điều kiện trong vòng lặp while bên dưới.

Ví dụ

Tìm ước chung lớn nhất của 120 và 25 bằng thuật toán Euclide:

 def gcd_division(a, b):
    while b != 0:
        remainder = a % b
        print(f"{a} = {a//b} * {b} + {remainder}")
        a = b
        b = remainder
    return a

a = 120
b = 25
print("The Euclidean algorithm using division:\n")
print(f"The GCD of {a} and {b} is: {gcd_division(a, b)}")
Chạy ví dụ »

Thuật toán Euclide gốc

Thay vì sử dụng phép chia như chúng tôi đã làm ở trên, thuật toán Euclide ban đầu được mô tả trong cuốn sách “Các phần tử” hơn 2000 năm trước lại sử dụng phép trừ.

Tìm ước chung lớn nhất bằng phép trừ.

Kết quả:

{{ msgDone }}

Tính toán

Cách thức hoạt động của thuật toán Euclide với phép trừ:

  1. Bắt đầu với hai số ban đầu \(a\) và \(b\).
  2. Tìm sự khác biệt \( ab=c\). Hiệu \(c\) có cùng ước chung lớn nhất như \(a\) và \(b\).
  3. Lấy hai số thấp nhất \(a\), \(b\) và \(c\) và tìm sự khác biệt giữa chúng.
  4. Lặp lại bước 2 và 3 cho đến khi chênh lệch là \(0\).
  5. Hiệu thứ hai cuối cùng được tính là ước chung lớn nhất.

Sử dụng phép trừ thay vì phép chia không nhanh bằng, nhưng cả phương pháp chia và phương pháp trừ đều sử dụng cùng một nguyên tắc toán học:

Ước chung lớn nhất của các số \(a\) và \(b\), cũng là ước chung lớn nhất của chênh lệch giữa \(a\) và \(b\).

Điều này có thể được hiển thị chỉ trong một vài dòng.

Các số \(a\) và \(b\) có ước chung lớn nhất \(x\).

Điều này có nghĩa là cả \(a\) và \(b\) đều có thể được phân tích thành thừa số như thế này:

\[ \begin{equation} \begin{aligned} a & = k \cdot x \\ b & = l \cdot x \end{aligned} \end{equation} \]

Sau khi nhân tử hóa, việc trừ \(b\) khỏi \(a\) cho chúng ta một kết quả rất thú vị:

\[ \begin{equation} \begin{aligned} ab & = k \cdot x - l \cdot x \\ & = (kl) \cdot x \end{aligned} \end{equation} \]

Chúng ta có thể thấy rằng ước chung lớn nhất (\(x\)) của \(a\) và \(b\) cũng là ước chung lớn nhất của chênh lệch giữa \(a\) và \(b\)!

Nguyên tắc này là lý do tại sao thuật toán Euclide hoạt động và nó là điều khiến thuật toán này trở nên khả thi.


Tìm ước chung lớn nhất bằng phép trừ

Sử dụng nguyên tắc được mô tả ở trên, rằng hiệu giữa \(a\) và \(b\) cũng có cùng ước số chung lớn nhất, chúng ta có thể sử dụng phép trừ để tìm ước số chung lớn nhất, giống như thuật toán ban đầu của Euclid.

Hãy tìm ước chung lớn nhất của \(120\) từ \(25\) bằng phép trừ.

\[ \begin{equation} \begin{aligned} 120 - 25 & = 95 \end{aligned} \end{equation} \]

Theo nguyên tắc toán học đã được mô tả, các số \(120\), \(25\) và \(95\) đều có chung ước số chung lớn nhất.

Điều này có nghĩa là chúng ta có thể giảm bớt vấn đề của mình hơn nữa bằng cách trừ \(25\) khỏi \(95\):

\[ \begin{equation} \begin{aligned} 95 - 25 & = 70 \end{aligned} \end{equation} \]

Nếu chúng ta tiếp tục như vậy, luôn lấy hai số thấp nhất từ ​​bước trước và tìm sự khác biệt giữa chúng, chúng ta sẽ có được các phép tính sau:

\[ \begin{equation} \begin{aligned} 70 - 25 & = 45 \\ 45 - 25 & = 20 \\ 25 - 20 & = 5 \\ 20 - 5 & = 15 \\ 15 - 5 & = 10 \\ 10 - 5 & = \underline{\textbf{5}} \\ 5 - 5 & = 0 \end{aligned} \end{equation} \]

Thuật toán Euclide sử dụng phép trừ được thực hiện khi chênh lệch là \(0\).

Ước chung lớn nhất của \(120\) và \(25\) có thể được tìm thấy ở bước trước, đó là \(5\).

Bây giờ chúng ta có thể tính ước chung lớn nhất bằng phép trừ bằng tay, việc triển khai nó bằng ngôn ngữ lập trình sẽ dễ dàng hơn.


Thực hiện thuật toán Euclide bằng phép trừ

Để tìm ước chung lớn nhất bằng phép trừ, chúng ta tiếp tục chạy thuật toán cho đến khi hiệu giữa \(a\) và \(b\) là \(0\), như chúng ta vừa thấy.

Điều này cũng giống như việc nói rằng chúng ta tiếp tục chạy thuật toán miễn là \(a\) và \(b\) là các giá trị khác nhau. Đó là lý do tại sao a != b là điều kiện trong vòng while bên dưới.

Ví dụ

Tìm ước chung lớn nhất của 120 và 25 bằng thuật toán Euclide có phép trừ:

 def gcd_subtraction(a, b):
    while a != b:
        if a > b:
            print(f"{a} - {b} = {a-b}")
            a = a - b
        else:
            print(f"{b} - {a} = {b-a}")
            b = b - a
    return a

a = 120
b = 25
print("The Euclidean algorithm using subtraction:\n")
print(f"The GCD of {a} and {b} is: {gcd_subtraction(a, b)}")
Chạy ví dụ »

So sánh phương pháp trừ với phương pháp chia

Để xem phương pháp chia có thể tốt như thế nào để tìm ước chung lớn nhất và các phương pháp này giống nhau như thế nào, chúng ta sẽ:

  1. Sử dụng phép trừ để tìm ước chung lớn nhất của \(120\) và \(25\).
  2. Sử dụng phép chia có số dư để tìm ước chung lớn nhất của \(120\) và \(25\).
  3. So sánh các phương pháp trừ và chia.

1. Sử dụng phép trừ

Tìm ước chung lớn nhất của \(120\) và \(25\) bằng phép trừ:

\[ \begin{equation} \begin{aligned} 120 - 25 & = 95 \\ 95 - 25 & = 70 \\ 70 - 25 & = 45 \\ 45 - 25 & = 20 \\ 25 - 20 & = 5 \\ 20 - 5 & = 15 \\ 15 - 5 & = 10 \\ 10 - 5 & = \underline{\textbf{5}} \\ 5 - 5 & = 0 \end{aligned} \end{equation} \]

Sử dụng phép trừ, thuật toán kết thúc khi chênh lệch là \(0\).

Trong phép tính cuối cùng thứ hai, chúng ta thấy rằng ước chung lớn nhất của \(120\) và \(25\) là \(5\).

Lưu ý cách \(25\) và \(5\) phải được trừ đi nhiều lần cho đến khi tìm thấy GCD.


2. Sử dụng phép chia

Tìm ước chung lớn nhất của \(120\) và \(25\) bằng phép chia có số dư như sau:

\[ \begin{equation} \begin{aligned} 120 & = 4 \cdot 25 + 20 \\ 25 & = 1 \cdot 20 + \underline{\textbf{5}} \\ 20 & = 4 \cdot 5 + 0 \end{aligned} \end{equation} \]

Sử dụng phép chia, thuật toán Euclide kết thúc khi phần còn lại là \(0\).

Số dư trước đó \(5\) là ước số chung lớn nhất của \(120\) và \(25\).


3. So sánh

Hãy xem các phương pháp trừ và chia ở trên.

Để dễ dàng nhận thấy phép tính chia về cơ bản giống như phép tính trừ, chúng ta có thể viết phép chia có số dư như sau:

\[ \begin{equation} \begin{aligned} 120 - 4 \cdot 25 & = 20 \\ 25 - 1 \cdot 20 & = \underline{\textbf{5}} \\ 20 - 4 \cdot 5 & = 0 \end{aligned} \end{equation} \]

Bằng cách sử dụng phép trừ, \(25\) được trừ khỏi \(120\) tổng cộng \(4\) lần, trong khi phương pháp chia thực hiện điều này chỉ trong một bước.

Tương tự, phương pháp trừ trừ \(5\) tổng cộng \(4\) lần, trong khi phương pháp chia thực hiện tương tự chỉ trong một phép tính.

Như bạn có thể thấy, các phương thức thực hiện điều tương tự, phương pháp chia chỉ thực hiện nhiều phép trừ trong cùng một phép tính, để tìm ước chung lớn nhất nhanh hơn.



×

Liên hệ bán hàng

Nếu bạn muốn sử dụng dịch vụ của Example.com.vn với tư cách là một tổ chức giáo dục, nhóm hoặc doanh nghiệp, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Báo cáo lỗi

Nếu bạn muốn báo cáo lỗi hoặc nếu bạn muốn đưa ra đề xuất, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Example.com.vn được tối ưu hóa cho việc học tập và đào tạo. Các ví dụ có thể được đơn giản hóa để cải thiện khả năng đọc và học. Các hướng dẫn, tài liệu tham khảo và ví dụ liên tục được xem xét để tránh sai sót, nhưng chúng tôi không thể đảm bảo tính chính xác hoàn toàn của mọi nội dung. Khi sử dụng W3Schools, bạn đồng ý đã đọc và chấp nhận các điều khoản sử dụng , chính sách cookie và quyền riêng tư của chúng tôi.

Bản quyền 1999-2024 của Refsnes Data. Đã đăng ký Bản quyền. Example.com.vn được cung cấp bởi W3.CSS .