Phép modulo là gì?
Phép modulo, viết là a mod b, cho ra phần dư còn lại khi lấy số bị chia a chia cho số chia (modulus) b. Phép toán này có mặt ở khắp nơi trong lập trình và toán học: từ tính toán theo kiểu đồng hồ, băm dữ liệu (hashing), duyệt vòng qua một danh sách, kiểm tra tính chia hết cho đến mật mã học đều dựa vào nó. Công cụ này tính số dư cho cả số dương, số âm lẫn số thập phân, đồng thời trình bày lời giải đầy đủ từng bước.
Cách sử dụng
Bạn chỉ cần nhập Số bị chia (a) và Số chia / Modulus (b). Cả hai giá trị đều có thể là số âm hoặc số thập phân — dùng nút +/- để đổi dấu nhanh chóng. Số chia không được bằng 0, vì phép chia cho 0 là không xác định. Kết quả sẽ hiển thị số dư, thương số nguyên, giá trị modulo theo quy ước "làm tròn xuống" (tùy chọn) và một lời giải được trình bày rõ ràng.
Giải thích công thức
Máy tính này dùng quy ước chia cắt phần thập phân (truncated-division) — đúng theo cách mà toán tử % hoạt động trong C, Java và JavaScript. Trước tiên, thương được cắt bỏ phần thập phân về phía số 0: q = trunc(a / b). Sau đó số dư được tính là n = a - q*b. Vì thương được cắt cụt chứ không làm tròn xuống, nên số dư sẽ mang dấu của số bị chia a. Ví dụ ở đây -5 mod 2 = -1, trong khi quy ước "làm tròn xuống" (floored, hiển thị ở dòng kết quả phụ) lại cho ra 1 vì lấy theo dấu của số chia.
$$\text{a} \bmod \text{b} = \text{a} - \left\lfloor \dfrac{\text{a}}{\text{b}} \right\rceil_{0} \cdot \text{b}$$
$$\begin{gathered} r = \text{a} - q \cdot \text{b} \\[1.5em] \text{where}\quad \left\{ \begin{aligned} q &= \operatorname{trunc}\!\left( \dfrac{\text{a}}{\text{b}} \right) \\ \text{b} &\neq 0 \end{aligned} \right. \end{gathered}$$
Ví dụ minh họa
Với a = 5, b = 2: thương là trunc(5/2) = trunc(2.5) = 2, và số dư là 5 - 2x2 = 1. Lời giải: 5 chia 2 được 2 dư 1, và 2 x 2 + 1 = 5. Vậy 5 mod 2 = 1. Một trường hợp với số thập phân: 7.5 mod 2 cho thương trunc(3.75) = 3 và số dư 7.5 - 3x2 = 1.5.
$$\operatorname{trunc}\!\left(\frac{5}{2}\right) = \operatorname{trunc}(2.5) = 2$$
$$5 - 2 \times 2 = 1$$
$$2 \times 2 + 1 = 5 \quad\Rightarrow\quad 5 \bmod 2 = 1$$
$$\operatorname{trunc}(3.75) = 3 \qquad 7.5 - 3 \times 2 = 1.5$$
Câu hỏi thường gặp
Tại sao -5 mod 2 = -1 mà không phải 1? Công cụ này theo quy ước truncated của các ngôn ngữ lập trình, nên số dư mang cùng dấu với số bị chia. Dòng modulo "làm tròn xuống" sẽ cho bạn đáp án theo quy ước toán học (là 1) khi bạn cần kết quả mang dấu của số chia.
Làm sao để kiểm tra một số có chia hết không? Số x chia hết cho b khi và chỉ khi \(x \bmod \text{b} = 0\). Ví dụ \(496 \bmod 4 = 0\) (chia hết), còn \(226 \bmod 4 = 2\) (không chia hết).
Số chia có thể bằng 0 không? Không. Phép chia cho 0 là không xác định, nên máy tính sẽ báo lỗi nếu \(\text{b} = 0\).