Skip to main content
🔬 Advanced ✨ New

Máy Tính Modulo

Tính phần dư của phép chia. Tính a mod b tức thì với giải thích từng bước. Công cụ toán học miễn phí, kết quả chính xác.

Giải thích về phép toán Modulo

Phép toán modulo (mod, hoặc %) trả về số dư sau khi chia một số khác một số khác. Đối với một mod b: chia a cho b, và kết quả là số dư. Ví dụ, 17 mod 5 = 2 (vì 17 = 3 × 5 + 2). Kết quả luôn nằm trong khoảng [0, b-1] cho các giá trị dương.

Quan hệ cơ bản: a = q × b + r, trong đó q là thương (floor(a/b)) và r là số dư (0 ≤ r < b). Phép toán modulo là phép toán đi kèm với phép chia nguyên - nếu a ÷ b = q với số dư r, thì a mod b = r. Máy tính này sử dụng định nghĩa modulo toán học chính xác (luôn không âm cho chia số nguyên dương), thay vì số dư có dấu được sử dụng bởi một số ngôn ngữ lập trình.

Arithmetic modulo - toán học với một mô đun cố định nơi các số "lật lại" - tạo cơ sở cho toán học đồng hồ. Giờ trên đồng hồ được tính mod 12 hoặc mod 24. Nếu là 10 giờ sáng và bạn thêm 5 giờ: (10 + 5) mod 12 = 3 (sáng). Tính chất lật lại này là trung tâm cho vô số thuật toán trong khoa học máy tính, mật mã học và lý thuyết số.

Đẳng thức modulo và giải pháp từng bước

Hiểu về modulo trở nên trực giác với các ví dụ cụ thể. Đối với mỗi tính toán dưới đây, công thức là: số dư = a - floor(a ÷ b) × b.

Biểu thứcThương (floor)Số dư (a mod b)Xác minh
17 mod 5323 × 5 + 2 = 17 ✓
20 mod 4505 × 4 + 0 = 20 ✓
7 mod 3212 × 3 + 1 = 7 ✓
100 mod 714214 × 7 + 2 = 100 ✓
13 mod 13101 × 13 + 0 = 13 ✓
1 mod 5010 × 5 + 1 = 1 ✓
256 mod 1616016 × 16 + 0 = 256 ✓
365 mod 752152 × 7 + 1 = 365 ✓

Chú ý 365 mod 7 = 1: điều này cho chúng ta biết rằng một năm không nhuận có 52 tuần hoàn chỉnh cộng 1 ngày, vì vậy ngày trong tuần sẽ dịch chuyển 1 mỗi năm không nhuận. Một năm nhuận (366 ngày) mod 7 = 2, dịch chuyển ngày 2.

Ứng dụng của toán học modulo

Modulo xuất hiện khắp lập trình và toán học. Kiểm tra số chẵn lẻ: nếu n % 2 == 0, n là số chẵn. Mảng vòng và bộ đệm vòng: chỉ mục = (chỉ mục hiện tại + 1) % kích thước mảng lật trở lại đến đầu. Đại số: bucket = hash(key) % số_bucket ánh xạ bất kỳ giá trị hash nào đến chỉ mục bucket hợp lệ, đảm bảo không truy cập ngoài ranh giới.

Trong phép tính lịch, toán học ngày trong tuần sử dụng mod 7. Công thức Zeller và thuật toán Doomsday đều dựa trên toán học modulo để xác định ngày trong tuần cho bất kỳ ngày nào. Những công thức này hoạt động vì có 7 ngày trong một tuần - một mô đun cố định. Ký hiệu giờ sử dụng mod 24 để lật giờ giá trị đúng cách qua ranh giới giữa trưa.

Trong hệ thống số, modulo được sử dụng khắp nơi địa chỉ bộ nhớ được liên quan. Các mục nhập bảng trang tính, chọn bộ đệm cache và bộ nhớ ánh xạ I/O được ánh xạ đều dựa trên chỉ mục modulo. Bộ lệnh CPU thường bao gồm một lệnh dư (làm tròn modulo) cùng với lệnh chia, và các lệnh SIMD sử dụng modulo để lật các dải trong các lệnh trộn.

Trong đo lường lỗi, kiểm tra dư vòng (CRC) và tổng kiểm tra (checksum) được tính toán bằng toán học modulo đa thức trên GF(2). Số thẻ tín dụng vượt qua thuật toán Luhn (một kiểm tra modulo-10). Số ISBN-10 số sách sử dụng mod 11. Những kiểm tra này bắt các lỗi chuyển vị và lỗi số đơn trong mã số.

Modulo trong Cryptography

Arithmet tính theo mô đun là nền tảng toán học của mã hóa công khai hiện đại. Ba thuật toán mã hóa quan trọng nhất — RSA, Diffie-Hellman và Elliptic Curve Cryptography — đều dựa trên các phép toán được thực hiện theo mô đun của một số nguyên tố lớn hoặc hợp số.

Mã hóa RSA sử dụng nhân mũ theo mô đun: để mã hóa một tin nhắn M với khóa công khai (e, n), tính C = M^e mod n. Để giải mã, tính M = C^d mod n, nơi d là khóa riêng. An toàn dựa trên độ khó của việc phân tích n (một số nguyên tố lớn) — chỉ cần biết n, việc khôi phục p và q là không thể tính toán được cho kích thước khóa trên 2048 bit.

Thay đổi khóa Diffie-Hellman cho phép hai bên thiết lập một bí mật chung trên một kênh không an toàn: Alice gửi A = g^a mod p, Bob gửi B = g^b mod p. Mỗi bên tính bí mật chung: Alice tính B^a mod p = g^(ab) mod p, Bob tính A^b mod p = g^(ab) mod p. Một người nghe trộm gián điệp có thể bắt được g^a mod p và g^b mod p không thể khôi phục g^(ab) mod p mà không giải quyết được vấn đề lôgarit rời rạc.

An toàn của các hệ thống này phụ thuộc vào tính chất một chiều của nhân mũ theo mô đun: tính toán g^a mod p nhanh (sử dụng lặp lại bình phương, O(log a) nhân), nhưng đảo ngược nó — tìm một g^a mod p đã cho — được cho là cần thời gian phân tích số lớn cho các số nguyên tố lớn p.

Modulo với Số âm và Các trường hợp biên

Phép tính theo mô đun với số âm khác nhau tùy thuộc vào ngôn ngữ lập trình, gây ra nhiều lỗi khó tìm thấy. Hiểu biết sự khác biệt là quan trọng đối với các nhà phát triển phần mềm.

Ngôn ngữ-7 % 37 % -3Định nghĩa
Python2-2Chỉ dấu theo chia (mô đun thực sự)
JavaScript-11Chỉ dấu theo số chia (lại)
C / C++-11Chỉ dấu theo số chia (C99+)
Java-11Chỉ dấu theo số chia
Ruby2-2Chỉ dấu theo chia (mô đun thực sự)
Math (định nghĩa)21 (hoặc không xác định)Luôn trả về kết quả không âm cho chia số nguyên tố

Trong toán học, mô đun luôn trả về kết quả không âm: -7 mod 3 = 2 (vì -7 = -3×3 + 2, và 0 ≤ 2 < 3). Bài này sử dụng định nghĩa toán học.

Cách an toàn để đảm bảo kết quả không âm trong bất kỳ ngôn ngữ nào: ((a % b) + b) % b. Mô đun này xử lý các đầu vào âm chính xác và được sử dụng nội bộ bởi bộ tính toán của chúng tôi. Mẫu này quan trọng khi sử dụng mô đun cho chỉ mục mảng hoặc tính toán ngày lịch, nơi kết quả âm sẽ gây ra lỗi.

Trường hợp biên để nhớ: (1) Bất kỳ số nào mod 1 = 0 — chia cho 1 không còn dư. (2) Bất kỳ số nào mod chính nó = 0. (3) 0 mod bất kỳ số nguyên tố nào khác = 0. (4) Chia (và mô đun) bằng không là không xác định — luôn xác minh chia trước khi tính mô đun. Bộ tính toán của chúng tôi hiển thị một thông báo lỗi rõ ràng khi mô đun bằng không.

Modulo và Kiểm tra chia hết

Một trong những ứng dụng thực tế của modulo là kiểm tra chia hết mà không cần thực hiện phép chia đầy đủ. Một số a là chia hết cho b nếu và chỉ nếu a mod b = 0. Điều này cho phép kiểm tra chia hết nhanh chóng:

Chia hết bởiTest Ví dụ
2n mod 2 = 0 (hàng đơn vị là số chẵn)128 mod 2 = 0 ✓
3Tổng các chữ số mod 3 = 0123: 1+2+3=6, 6 mod 3 = 0 ✓
4Hai chữ số cuối mod 4 = 0312: 12 mod 4 = 0 ✓
5Hàng đơn vị là 0 hoặc 5735 mod 5 = 0 ✓
9Tổng các chữ số mod 9 = 0369: 3+6+9=18, 18 mod 9 = 0 ✓
10n mod 10 = 0 (hàng đơn vị là 0)500 mod 10 = 0 ✓

Những quy tắc chia hết này là những quy tắc rút gọn được tạo ra từ tính chất toán học modulo. Các quy tắc tổng chữ số cho 3 và 9 hoạt động vì 10 ≡ 1 (mod 3) và 10 ≡ 1 (mod 9), có nghĩa giá trị vị trí của mỗi chữ số là không quan trọng đối với chia hết bởi 3 hoặc 9. Những quy tắc này được dạy trong trường tiểu học mà không có ngữ cảnh toán học modulo, nhưng cơ chế ẩn dưới đây là modulo.

Modulo Exponentiation: Tính nhanh Lũy thừa

Tính toán a^b mod n trực tiếp bằng cách tính trước a^b, sau đó lấy mod n, là không thực tế cho các lũy thừa lớn — a^100 có thể có hàng nghìn chữ số. Tính lũy thừa modulo sử dụng định nghĩa (a×b) mod n = ((a mod n) × (b mod n)) mod n để giữ các kết quả trung gian nhỏ.

Algoritme nhanh sử dụng lũy thừa lặp lại (lũy thừa nhị phân):

Này giảm số lần nhân từ b đến O(log₂ b). Đối với b = 2048-bit RSA exponents (~10^600), điều này là sự khác biệt giữa hàng nghìn tỷ lần nhân và chỉ ~2000. mà không có tối ưu hóa này, mã hóa RSA sẽ không thể thực hiện được.

Câu hỏi thường gặp

Như thế nào là 15 mod 4?

15 mod 4 = 3. Bởi vì 15 = 3×4 + 3, số dư là 3. Xác minh: 3×4 = 12, và 15 − 12 = 3. ✓

Như thế là mod 0?

Modulo bằng 0 là không xác định, giống như chia cho 0. Bạn không thể tính toán mod 0. Máy tính của chúng tôi sẽ trả về thông báo lỗi trong trường hợp này. Mọi phép toán dựa trên chia sẽ yêu cầu một chia hết khác 0.

Như thế là modulo liên quan đến tính chia hết?

Số a chia hết cho b nếu và chỉ nếu a mod b = 0. Ví dụ, 24 mod 6 = 0, vì vậy 24 chia hết cho 6. 25 mod 6 = 1, vì vậy 25 không chia hết cho 6. Điều này làm cho modulo là công cụ cơ bản để kiểm tra tính chia hết trong khoa học máy tính.

Như thế là sự khác biệt giữa mod và số dư?

Đối với các số nguyên dương, mod và số dư giống nhau. Đối với các số nguyên âm, chúng khác nhau: modulo toán học luôn trả về kết quả không âm (kí hiệu theo chia hết), trong khi số dư có dấu của số chia. Ví dụ, -7 mod 3 = 2 (toán học), nhưng -7 số dư 3 = -1 (như trong C, Java, JavaScript).

Như thế là 10 mod 3?

10 mod 3 = 1. Bởi vì 10 = 3×3 + 1, số dư là 1. Bạn có thể xác minh: 3×3 = 9, và 10 − 9 = 1. Điều này có nghĩa là 10 để lại số dư 1 khi chia cho 3, vì vậy 10 không chia hết cho 3.

Như thế là 0 mod 5?

0 mod 5 = 0. Số 0 chia cho bất kỳ số nguyên khác 0 nào đều cho số hạng 0 và số dư 0. Tóm lại, 0 mod n = 0 cho bất kỳ n ≠ 0. Điều này phù hợp với định nghĩa: 0 = 0×5 + 0.

Như thế là modulo được sử dụng trong lập trình?

Sử dụng phổ biến bao gồm: kiểm tra lẻ/đôi (n%2==0), vòng lặp mảng (index%length), thực hiện bộ đệm vòng tròn, phân phối các mục vào thùng đựng trong bảng phân tán (hash%size), quay vòng qua các trạng thái trong máy trạng thái, và đảm bảo các sự kiện tuần hoàn kích hoạt trên mỗi lần lặp thứ n (counter%n==0).

Như thế là tính toán đồng hồ?

Tính toán đồng hồ là toán học modulo hàng ngày. Đồng hồ 12 giờ sử dụng mod 12: 11 giờ + 3 giờ = (11+3) mod 12 = 2 giờ. Hành vi vòng quay này chính xác là toán học modulo. Tương tự, các ngày trong tuần sử dụng mod 7, và thời gian quân sự sử dụng mod 24 cho giờ.

Như thế là modulo quan trọng trong mật mã học?

Toán học modulo làm cho các hàm một chiều có thể. Tính toán g^a mod p (giả sử g, a, p) nhanh chóng, nhưng tìm g^a mod p và p (vấn đề lôgarit rời rạc) là không thể tính toán được cho các số nguyên tố lớn. Sự bất đối xứng này là nền tảng cho giao thức Diffie-Hellman, RSA và hầu hết mật mã học công khai bảo vệ giao tiếp qua internet.

Như thế là kết quả của bất kỳ số nào mod 1?

Bất kỳ số nguyên nào mod 1 = 0. Chia cho 1 luôn để lại số dư không — mọi số nguyên đều chia hết cho 1. Điều này là phù hợp về mặt toán học: a = a×1 + 0, vì vậy số dư luôn là 0. Trường hợp này là quan trọng để xử lý trong thực hiện toán học modulo.

Modulo trong Cuộc Sống Hằng Ngày: Ví dụ Thực Tiễn

Arithmetic mô-đun thể hiện lên nhiều hơn trong cuộc sống hàng ngày hơn những gì mà nhiều người nghĩ. Khi bạn đọc đồng hồ, tính toán khi một sự kiện tuần hoàn lại, kiểm tra xem một số liệu có chia hết cho 9 hay không, hoặc xem chữ số cuối cùng của một năm để xác định ngày nào trong tuần một kỷ niệm rơi vào, bạn đang làm toán mô-đun — ngay cả khi bạn không sử dụng tên gọi này.

Lịch và tuần hoàn: Nếu một sự kiện xảy ra mỗi 7 ngày và hôm nay là thứ Hai (ngày 2, được chỉ định bằng 0 từ Chủ nhật=0), thì 30 ngày sau là (2+30) mod 7 = 32 mod 7 = 4, đó là thứ Năm. Tính toán trực tiếp này nhanh hơn nhiều so với việc đếm tuần và ngày riêng biệt. Tương tự, nếu một đăng ký được gia hạn vào ngày 28 của mỗi tháng và hiện tại là ngày 15, số ngày cho đến khi gia hạn là (28−15) mod 31 = 13 ngày.

Đánh dấu số chữ số kỹ thuật số: Tiêu chuẩn mã vạch ISBN-13 sử dụng mô-đun 10. Chữ số cuối cùng của bất kỳ ISBN-13 nào được chọn để đảm bảo rằng tổng trọng số của tất cả 13 chữ số chia hết cho 10. Nếu bạn nhập sai một chữ số khi nhập ISBN của một cuốn sách, kiểm tra sẽ thất bại (mod 10 ≠ 0) và một lỗi sẽ được đánh dấu. Số thẻ tín dụng sử dụng thuật toán Luhn — kiểm tra mod-10 — cho cùng một mục đích. Tiêu chuẩn ISBN-10 sử dụng mod 11, cho phép phát hiện các chuyển đổi đơn giản.

Ổ cứng và địa chỉ: Ổ cứng thường được chỉ định bằng các lũy thừa của 2 (1024, 2048, 4096 byte mỗi trang). Khi một chương trình truy cập bộ nhớ, hệ điều hành sử dụng mô-đun để tính toán trang bộ nhớ mà địa chỉ rơi vào: trang_số = địa chỉ mod trang_kích thước. Chọn dòng bộ đệm trong bộ đệm CPU sử dụng mô-đun tương tự. Wrap-around bộ đệm trong xử lý âm thanh, hàng đợi gói mạng và truyền video đều sử dụng toán học vòng tròn: vị trí_ghi = (vị trí_ghi + 1) % kích thước_buffer.

Biểu mẫu âm nhạc và nghệ thuật: Mô hình nhịp điệu trong lý thuyết âm nhạc được phân tích bằng toán học mô-đun. Một nhịp 4/4 có nhịp 0, 1, 2, 3 lặp lại — một chu kỳ mod-4. Các nhịp đa dạng xảy ra khi hai nhịp độc lập với chu kỳ m và n chơi cùng lúc; chúng đồng bộ hóa mỗi chu kỳ lcm(m,n) nhịp. Các mẫu hình ảnh như các mảnh gạch lát lại lặp lại với các chu kỳ mô-đun trong hai chiều.

Giải pháp địa lý và tính toán múi giờ: Các offset múi giờ từ -12 đến +14. Chuyển đổi giữa múi giờ: thời gian T trong UTC, thời gian địa phương = (T + offset) mod 24. Giá trị kết quả có thể trông không rõ ràng (ví dụ: 23 + 5 = 28, mod 24 = 4, có nghĩa là 4:00 sáng ngày mai), nhưng phép toán mod xử lý ranh giới giữa trưa và tối đúng cách. Các lần di chuyển qua đường quốc tế sử dụng mod 24 kết hợp với các tính toán ngày trong tuần sử dụng mod 7.

Hiểu biết về mô-đun làm cho các tính toán hàng ngày rõ ràng hơn, nhanh hơn và ít có lỗi hơn. Một khi bạn thấy mẫu, bạn sẽ nhận thấy toán học mô-đun trong các tối ưu hóa máy tính, các thuật toán xoay vòng trong trò chơi video, lịch trình vòng tròn trong các giải đấu thể thao và cân bằng tải trên các cụm máy chủ — tất cả đều dựa trên khái niệm đơn giản nhưng mạnh mẽ về số dư sau khi chia.