Máy tính modulo
Phép modulo (hay “mod”) trả về phần dư sau phép chia số nguyên: 17 mod 5 = 2 vì 17 = 3·5 + 2. Đây là cốt lõi của số học đồng hồ, mật mã học, hàm băm và mẫu “mỗi hàng thứ N” trong SQL. Máy tính này nhận toán hạng nguyên hoặc thập phân, hiển thị rõ ràng thương và phần dư, đồng thời xử lý khác biệt về quy ước dấu giữa các ngôn ngữ (% trong Python ≠ % trong C với số âm).
Cách tính a mod b
-
1
Nhập số bị chia (a) và số chia (b)
Bất kỳ số nào; chấp nhận số thập phân và số âm.
-
2
Chọn quy ước dấu
Phép chia cắt bỏ (C, Java, Go), phép chia làm tròn xuống (Python, Ruby, quy ước toán học).
-
3
Đọc thương và phần dư
a = q·b + r, với quy tắc đã chọn cho dấu của r.
-
4
Xem biểu thức toán học
Các giá trị được thay vào giúp thấy rõ từng bước.
Hai quy ước cho số âm
Với toán hạng dương, mọi quy ước đều thống nhất: 17 mod 5 = 2. Với số âm, các ngôn ngữ khác nhau:
| Ngôn ngữ | -17 mod 5 |
Quy ước |
|---|---|---|
| Python, Ruby | 3 | Làm tròn xuống |
| C, Java, Go, JS | -2 | Cắt bỏ |
| Sách giáo khoa Toán | 3 | Làm tròn xuống (thường) |
Phép chia làm tròn xuống: thương được làm tròn về phía −∞. Phần dư luôn mang dấu của số chia: cùng dấu với b.
Phép chia cắt bỏ: thương được làm tròn về phía 0. Phần dư mang dấu của số bị chia: cùng dấu với a.
Với a = -17, b = 5:
- Cắt bỏ: q = -3 (làm tròn về 0), r = -17 − (-3)·5 = -2.
- Làm tròn xuống: q = -4 (làm tròn về -∞), r = -17 − (-4)·5 = 3.
Cả hai đều đúng theo quy ước của mình. Hãy chọn cái phù hợp với ngôn ngữ của bạn.
Modulo xuất hiện ở đâu
- Thời gian. Số phút trong một giờ, các ngày trong tuần, số giây trong một ngày, tất cả đều là số học modulo.
- Bảng băm.
hash(key) mod table_sizechọn một bucket. - Lập lịch xoay vòng (round-robin).
task_i mod worker_countphân bổ công việc. - Mật mã học. RSA và Diffie-Hellman được xây trên mod
nvới các số nguyên tố cực lớn. - Mỗi hàng thứ N. Trong SQL:
WHERE id % 3 = 0. - Kiểm tra chẵn/lẻ.
n mod 2 == 0nghĩa là số chẵn. - Mẫu xen kẽ. Kẻ sọc theo hàng, tô màu cách một phần tử.
- Bộ đệm vòng.
(index + 1) mod sizequay lại đầu.
Các đẳng thức hữu ích
(a + b) mod n = ((a mod n) + (b mod n)) mod n(a · b) mod n = ((a mod n) · (b mod n)) mod n(a^k) mod ncó thể tính bằng lũy thừa modular nhanh trong O(log k), thiết yếu cho mật mã số lớn.a mod 1 = 0với mọi số nguyên a.a mod a = 0.
Modulo số thập phân
Với số thực, định nghĩa tự nhiên là a mod b = a − b · floor(a/b). 7.5 mod 2.5 = 0 vì 7,5 là bội số chính xác. 7.6 mod 2.5 = 0.1.
Toán tử % của JavaScript hoạt động trên số thực; fmod của Python thực hiện modulo thực kiểu cắt bỏ; % của Python thực hiện modulo thực kiểu làm tròn xuống.
Ví dụ có lời giải
100 mod 7: 100 = 14·7 + 2, nên phần dư là 2.25 mod 4: 25 = 6·4 + 1, nên phần dư là 1.-10 mod 3(làm tròn xuống):-10 = -4·3 + 2, phần dư 2. (Cắt bỏ sẽ cho-1.)17.5 mod 5: 17,5 = 3·5 + 2,5, phần dư 2,5.
Câu hỏi thường gặp
Hầu hết trường hợp chúng đồng nghĩa. Về mặt hình thức, “modulo” thường hàm ý quy ước toán học (làm tròn xuống), trong khi “remainder” (phần dư) thường chỉ biến thể cắt bỏ (kiểu C). Những tên gọi này lọt vào tài liệu ngôn ngữ; khi quan trọng, hãy nêu rõ quy ước.
Python theo quy ước toán học (làm tròn xuống), giữ dấu của phần dư trùng với số chia. C theo quy ước ALU phần cứng (cắt bỏ), trong đó dấu của phần dư trùng với số bị chia. Không cái nào sai; chỉ là lựa chọn khác nhau.
Không, chia cho 0 là không xác định. Máy tính trả về lỗi khi b = 0.
Thường là có. Hãy kiểm tra đặc tả ngôn ngữ của bạn về cách xử lý số âm, Python và Ruby khác với C, Java, Go và JavaScript.
Với toán kiểu RSA dùng số 2048 bit, hãy dùng thư viện chuyên dụng (pow(a, b, n) của Python, BigInteger.modPow của Java). Máy tính này xử lý các giá trị thường ngày, không phải giá trị cấp mật mã.
Công cụ liên quan
Công cụ tính tỷ số nén
Tính tỷ số nén của động cơ từ đường kính xi-lanh, hành trình và thể tích buồng đốt. Nhận kết quả dạng X,X:1 cùng thể tích quét mỗi xi-lanh, ngay trên trình duyệt của bạn.
Máy tính tuổi
Tính tuổi chính xác theo năm, tháng và ngày từ ngày sinh, kèm tổng số ngày, giờ và đếm ngược đến sinh nhật kế tiếp.
Máy tính cổ tức
Ước tính thu nhập cổ tức hằng năm, lợi suất cổ tức và tăng trưởng tái đầu tư từ số cổ phiếu, giá và cổ tức mỗi cổ phiếu.
Máy tính dự đoán chiều cao khi trưởng thành
Nhận ước tính gần đúng về chiều cao khi trưởng thành từ chiều cao của bố mẹ ruột. Công cụ này không chẩn đoán bệnh.
Máy tính lũy thừa
Tính cơ số nâng lên lũy thừa nguyên, thập phân, âm hoặc phân số bất kỳ. Độ chính xác đầy đủ và ký hiệu khoa học cho kết quả rất lớn hoặc rất nhỏ.
Máy tính eGFR
Ước tính eGFR từ creatinin huyết thanh, tuổi và giới tính bằng phương trình creatinin CKD-EPI 2021 không dùng yếu tố chủng tộc. Kết quả theo mL/phút/1,73 m².
Công cụ này có phiên bản bằng các ngôn ngữ khác
- Calculadora de Módulo [ES]
- Calculateur de Modulo [FR]
- 剰余計算機 [JA]
- Calculadora de Módulo [PT]
- Modulokalkylator [SV]
- เครื่องคำนวณโมดูโล (Modulo) [TH]
- حاسبة باقي القسمة (Modulo) [AR]
- Modulo-Rechner [DE]
- 모듈로 계산기 [KO]
- Kalkulator Modulo [ID]
- Modulo-calculator [NL]
- Kalkulator modulo [PL]
- Калькулятор остатка от деления [RU]
- Modulo Hesaplayıcı [TR]
- 取模计算器 [ZH]
- Modulo Calculator [EN]
- Calcolatore Modulo [IT]