Lý thuyết số & số học đồng dư: bài tập có lời giải từng bước
Bài tập Lý thuyết số & số học đồng dư miễn phí có hình vẽ, gợi ý và lời giải đầy đủ. Số liệu mới mỗi lần, ở ba mức độ: ước chung lớn nhất và số dư, nghịch đảo và đồng dư, lũy thừa modulo và RSA.
Trước hết hãy rút gọn mọi số theo modulo n; số dư nằm trong khoảng từ 0 đến n − 1.
Với ước chung lớn nhất, hãy chia liên tiếp theo thuật toán Euclid; số dư khác 0 cuối cùng chính là ước chung lớn nhất.
Với số nghịch đảo, hãy chạy thuật toán Euclid mở rộng và lấy hệ số của a; cộng n nếu nó âm.
Giải a·x ≡ b bằng cách nhân với a⁻¹; kết hợp hai đồng dư bằng cách viết x = r₁ + m₁k.
Với lũy thừa, hãy viết số mũ ở dạng nhị phân và bình phương liên tiếp; trong RSA, d = e⁻¹ mod φ(n) với φ(n) = (p − 1)(q − 1).
Lỗi thường gặp
Đưa ra số dư âm cho một số âm.
Dừng thuật toán Euclid ở số dư đầu tiên.
Để số nghịch đảo âm mà không cộng n.
Lấy số mũ RSA d theo modulo n thay vì φ(n).
Rút gọn số mũ theo modulo p thay vì p − 1 khi dùng định lý Fermat.
Công thức chính
Phép chia có dư
a = q·n + r, 0 ≤ r < n
Euclid
gcd(a, b) = gcd(b, a mod b)
Bội chung nhỏ nhất
lcm(a, b) = a·b/gcd(a, b)
Nghịch đảo
a·a⁻¹ ≡ 1 (mod n), gcd(a, n) = 1
Đồng dư tuyến tính
a·x ≡ b → x ≡ a⁻¹·b (mod n)
Hàm phi Euler
φ(n) = n·∏(1 − 1/p), φ(pᵏ) = pᵏ − pᵏ⁻¹
Fermat
aᵖ⁻¹ ≡ 1 (mod p)
RSA
n = pq, φ = (p − 1)(q − 1), d = e⁻¹ mod φ, c = mᵉ mod n, m = cᵈ mod n
Học Lý thuyết số & số học đồng dư từ đầu
1Số dư và đồng dư
Chia a cho n cho ta thương q và số dư r: a = q·n + r với 0 ≤ r < n. Số dư được viết là a mod n. Với một số âm, q cũng âm: −3 = −1·7 + 4, nên −3 mod 7 = 4.
Hai số đồng dư theo modulo n, a ≡ b (mod n), khi chúng có cùng số dư, tức là khi n chia hết a − b.
Số dư có thể được rút gọn ở mỗi bước, giúp giữ các số nhỏ:
(a + b) mod n = ((a mod n) + (b mod n)) mod n, và tương tự với a·b
Ví dụ 47·58 mod 9: 47 ≡ 2 và 58 ≡ 4, nên 47·58 ≡ 8 (mod 9).
Tự kiểm tra −17 mod 5 bằng bao nhiêu?
2
3
−2
−3
Đáp số: 3. −17 = −4·5 + 3, nên số dư là 3. Đáp án 2 là 17 mod 5; số dư không bao giờ âm.
2Thuật toán Euclid
Ước chung lớn nhất gcd(a, b) là số lớn nhất chia hết cho cả hai. Thuật toán Euclid dùng gcd(a, b) = gcd(b, a mod b):
Chia: a = q·b + r.
Thay (a, b) bằng (b, r).
Lặp lại cho đến khi số dư bằng 0. Số dư khác 0 cuối cùng là ước chung lớn nhất.
Bội chung nhỏ nhất suy ra từ đó: lcm(a, b) = a·b / gcd(a, b).
Tự kiểm tra gcd(84, 36) bằng bao nhiêu?
12
252
4
6
Đáp số: 12. 84 = 2·36 + 12 và 36 = 3·12 + 0, nên ước chung lớn nhất là 12. 252 là bội chung nhỏ nhất, 84·36/12.
3Nghịch đảo và thuật toán mở rộng
Nghịch đảo của a theo modulo n là số x thỏa a·x ≡ 1 (mod n). Nó tồn tại đúng khi gcd(a, n) = 1.
Thuật toán Euclid mở rộng chạy Euclid trên (n, a) và giữ một hệ số t cho mỗi số dư, sao cho mọi số dư r ≡ t·a (mod n). Bắt đầu với t = 0 cho n và t = 1 cho a; mỗi t mới bằng t ở hai hàng trên trừ q nhân t ở một hàng trên. Khi số dư 1 xuất hiện, t của nó là số nghịch đảo.
Với số nghịch đảo, đồng dư a·x ≡ b (mod n) được giải bằng x ≡ a⁻¹·b. Khi d = gcd(a, n) lớn hơn 1, có d nghiệm nếu d chia hết b, và không có nghiệm nào nếu ngược lại.
Hai đồng dư với các modulo nguyên tố cùng nhau, x ≡ r₁ (mod m₁) và x ≡ r₂ (mod m₂), có đúng một nghiệm theo modulo m₁·m₂ (định lý số dư Trung Hoa). Viết x = r₁ + m₁k và giải tìm k.
Bình phương lặp tính aᵏ mod n nhanh: viết k ở dạng nhị phân, tìm a, a², a⁴, a⁸, … mod n bằng cách bình phương và rút gọn, rồi nhân các lũy thừa có bit bằng 1.
Định lý Fermat nhỏ: với số nguyên tố p không chia hết a, aᵖ⁻¹ ≡ 1 (mod p). Vì vậy số mũ có thể được rút gọn theo modulo p − 1.
RSA tạo một khóa từ hai số nguyên tố p và q:
n = p·q và φ(n) = (p − 1)(q − 1).
Chọn e với gcd(e, φ(n)) = 1; (n, e) là khóa công khai.
Tính d = e⁻¹ mod φ(n): khóa riêng.
Mã hóa c = mᵉ mod n; giải mã m = cᵈ mod n.
φ(n) của Euler đếm các số từ 1 đến n nguyên tố cùng nhau với n: φ(p) = p − 1 với số nguyên tố, φ(pᵏ) = pᵏ − pᵏ⁻¹, và φ có tính nhân với các thừa số nguyên tố cùng nhau.
Tự kiểm tra Một khóa RSA dùng p = 5, q = 11 và e = 3. d bằng bao nhiêu?
13
27
37
3
Đáp số: 27. φ(n) = 4·10 = 40, và 3·27 = 81 = 2·40 + 1, nên d = 27. Nghịch đảo của 3 theo modulo n = 55 sẽ là 37, nhưng d được lấy theo modulo φ(n).
5Lỗi thường gặp
Cho số dư âm với một số âm: −17 mod 5 là 3, không phải −2.
Dừng Euclid ở số dư đầu tiên thay vì số dư khác 0 cuối cùng.
Quên cộng n vào một hệ số âm từ thuật toán mở rộng.
Tính số mũ RSA d theo modulo n thay vì theo modulo φ(n).
Rút gọn số mũ theo modulo p thay vì p − 1 khi dùng định lý Fermat.
6Các câu hỏi thi trông như thế nào
Dễ: ước chung lớn nhất và số dư. Bạn chạy thuật toán Euclid để tìm gcd hoặc lcm, tìm số dư của số âm, và rút gọn tổng và tích theo modulo n.
Trung bình: nghịch đảo và đồng dư. Bạn tìm nghịch đảo modulo bằng thuật toán mở rộng, giải đồng dư tuyến tính, kết hợp hai đồng dư bằng định lý số dư Trung Hoa, và tính φ(n) của Euler.
Khó: lũy thừa modulo và RSA. Bạn dùng bình phương lặp và định lý Fermat, giải các đồng dư có nhiều nghiệm, và tìm số mũ bí mật RSA, bản mã và thông điệp đã giải mã.
Hãy tìm (914·953) mod 11 mà không nhân các số lớn ra: hãy rút gọn trước.
n = 11
Tìm (914·953) mod 11
Hiện các gợi ý
(x·y) mod n = ((x mod n)·(y mod n)) mod n, và tương tự với tổng.
914 mod 11 = 1, 953 mod 11 = 7.
Hãy rút gọn tích của các số dư theo modulo 11.
Hiện đáp án và lời giải từng bước
Tính chia hết và số dư: a mod n là số dư r với 0 ≤ r < n và a = q·n + r, cả khi a âm. Thuật toán Euclid tìm gcd(a, b) bằng cách lặp a = q·b + r và thay (a, b) bằng (b, r); số dư khác 0 cuối cùng là gcd. Khi đó lcm(a, b) = a·b/gcd(a, b). Số dư có thể được rút gọn ở mỗi bước: (a + b) mod n và (a·b) mod n chỉ phụ thuộc vào a mod n và b mod n.
Rút gọn từng số
914 ≡ 1, 953 ≡ 7 (mod 11)
Kết hợp
1·7 = 7 ≡ 7 (mod 11)
Đáp số
(914·953) mod 11 = 7
Ví dụ 2Trung bình
Hãy tìm hàm phi Euler φ(637), số các số nguyên từ 1 đến 637 nguyên tố cùng nhau với 637.
n = 637 = 72·13
Tìm φ(637)
Hiện các gợi ý
Hãy phân tích n thành thừa số nguyên tố: 637 = 72·13.
φ có tính nhân với các thừa số nguyên tố cùng nhau, và φ(pᵏ) = pᵏ − pᵏ⁻¹.
φ(n) = n·∏(1 − 1/p).
Hiện đáp án và lời giải từng bước
Nghịch đảo và đồng dư: a có nghịch đảo theo modulo n đúng khi gcd(a, n) = 1. Thuật toán Euclid mở rộng viết 1 = s·n + t·a, và khi đó a⁻¹ ≡ t (mod n). Một đồng dư a·x ≡ b (mod n) với gcd(a, n) = 1 có nghiệm x ≡ a⁻¹·b. Hai đồng dư x ≡ r₁ (mod m₁) và x ≡ r₂ (mod m₂) với các modulo nguyên tố cùng nhau có một nghiệm theo modulo m₁·m₂ (định lý số dư Trung Hoa). φ(n) của Euler đếm các số từ 1 đến n nguyên tố cùng nhau với n: φ(n) = n·∏(1 − 1/p).
Các thừa số nguyên tố
637 = 72·13
Hàm phi
φ(637) = φ(49)·φ(13) = 42·12 = 504
Đáp số
φ(637) = 504
Ví dụ 3Khó
Một khóa RSA dùng p = 13, q = 37 và e = 23. Hãy giải mã bản mã c = 225: tìm thông điệp m.
p = 13q = 37e = 23c = 225
Tìm m
Hiện các gợi ý
n = 481, φ(n) = 432.
d = e⁻¹ mod φ(n) = 263.
m = cd mod n = 225263 mod 481: dùng bình phương lặp.
Hiện đáp án và lời giải từng bước
Lũy thừa modulo và RSA: tính aᵏ mod n bằng bình phương lặp: viết k ở dạng nhị phân, bình phương, rút gọn sau mỗi bước và nhân các lũy thừa có bit bằng 1. Fermat: aᵖ⁻¹ ≡ 1 (mod p) với số nguyên tố p không chia hết a, nên số mũ có thể được rút gọn theo modulo p − 1. RSA: chọn các số nguyên tố p và q, n = p·q và φ(n) = (p − 1)(q − 1); số mũ công khai e nguyên tố cùng nhau với φ(n), và số mũ bí mật là d = e⁻¹ mod φ(n). Mã hóa bằng c = mᵉ mod n và giải mã bằng m = cᵈ mod n.
Số mũ bí mật
n = 481, φ(n) = 432
d = 23−1 mod 432 = 263
Giải mã bằng bình phương lặp
263 = 256 + 4 + 2 + 1
2251 ≡ 225 (mod 481)
2252 ≡ 120 (mod 481)
2254 ≡ 451 (mod 481)
2258 ≡ 419 (mod 481)
22516 ≡ 477 (mod 481)
22532 ≡ 16 (mod 481)
22564 ≡ 256 (mod 481)
225128 ≡ 120 (mod 481)
225256 ≡ 451 (mod 481)
225263 ≡ 225·120·451·451 ≡ 361 (mod 481)
Tin nhắn
m = 361
kiểm tra: 36123 mod 481 = 225
Đáp số
m = 361
Câu hỏi thường gặp
Lý thuyết số & số học đồng dư là gì?
Chia a cho n cho ta thương q và số dư r: a = q·n + r với 0 ≤ r < n. Số dư được viết là a mod n. Với một số âm, q cũng âm: −3 = −1·7 + 4, nên −3 mod 7 = 4.
Hai số đồng dư theo modulo n, a ≡ b (mod n), khi chúng có cùng số dư, tức là khi n chia hết a − b.
Làm thế nào để giải bài tập Lý thuyết số & số học đồng dư từng bước?
Trước hết hãy rút gọn mọi số theo modulo n; số dư nằm trong khoảng từ 0 đến n − 1.
Với ước chung lớn nhất, hãy chia liên tiếp theo thuật toán Euclid; số dư khác 0 cuối cùng chính là ước chung lớn nhất.
Với số nghịch đảo, hãy chạy thuật toán Euclid mở rộng và lấy hệ số của a; cộng n nếu nó âm.
Giải a·x ≡ b bằng cách nhân với a⁻¹; kết hợp hai đồng dư bằng cách viết x = r₁ + m₁k.
Với lũy thừa, hãy viết số mũ ở dạng nhị phân và bình phương liên tiếp; trong RSA, d = e⁻¹ mod φ(n) với φ(n) = (p − 1)(q − 1).
Những lỗi thường gặp trong Lý thuyết số & số học đồng dư là gì?
Đưa ra số dư âm cho một số âm.
Dừng thuật toán Euclid ở số dư đầu tiên.
Để số nghịch đảo âm mà không cộng n.
Lấy số mũ RSA d theo modulo n thay vì φ(n).
Rút gọn số mũ theo modulo p thay vì p − 1 khi dùng định lý Fermat.
Các bài tập Lý thuyết số & số học đồng dư bao gồm những gì?
Dễ: ước chung lớn nhất và số dư
Trung bình: nghịch đảo và đồng dư
Khó: lũy thừa modulo và RSA
Mỗi bài tập có số liệu mới, nên bạn học phương pháp chứ không học thuộc đáp án. Bí rồi? Hãy mở một gợi ý nhỏ trước, và chỉ xem giải thích đầy đủ khi cần.
Cách luyện tập hoạt động
Mỗi bài tập có số liệu mới, nên bạn học phương pháp chứ không học thuộc đáp án.
Bí rồi? Hãy mở một gợi ý nhỏ trước, và chỉ xem giải thích đầy đủ khi cần.
Tiến độ, lỗi sai và các bài đã lưu của bạn được giữ lại, để bạn xem lại trước kỳ thi.