Định lý thặng dư Trung Hoa (CRT)
Giới thiệu
Bài toán “vật không biết số”: có vật không biết số lượng, chia 3 dư 2, chia 5 dư 3, chia 7 dư 2. Hỏi có bao nhiêu?
Tức tìm số nguyên thỏa: chia 3 dư 2, chia 5 dư 3, chia 7 dư 2.
Bài toán xuất hiện sớm trong 《孙子算经》, có lời giải cụ thể. Nhà toán học Tần Cửu Thiều thời Tống trong 《数书九章》 (1247) đã giải hệ thống bài này. Câu đố ghi nhớ lời giải do Trình Đại Vị thời Minh trong 《算法统宗》:
三人同行七十希,五树梅花廿一支,七子团圆正半月,除百零五便得知.
\(2\times 70+3\times 21+2\times 15=233=2\times 105+23\) nên đáp án là \(23\).
Định nghĩa
Định lý Trung Quốc (Chinese Remainder Theorem, CRT) giải hệ phương trình đồng dư tuyến tính một ẩn (với \(n_1,\dots,n_k\) đôi một nguyên tố cùng nhau):
Bài toán “vật không biết số” là một ví dụ.
Quy trình
- Tính tích các mô-đun \(n\);
- Với phương trình thứ \(i\):
- Tính \(m_i=\frac{n}{n_i}\);
- Tính nghịch đảo \(m_i^{-1}\) modulo \(n_i\);
- Tính \(c_i=m_im_i^{-1}\) (không lấy mod \(n_i\)) .
- Nghiệm duy nhất modulo \(n\): \(x=\sum_{i=1}^k a_ic_i \pmod n\).
Hiện thực
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 | |
Chứng minh
Cần chứng minh \(x\) thỏa \(x\equiv a_i \pmod {n_i}\) với mọi \(i\).
Với \(i\neq j\), có \(m_j \equiv 0 \pmod {n_i}\), nên \(c_j \equiv 0 \pmod {n_i}\). Và \(c_i \equiv 1 \pmod {n_i}\). Do đó:
Vì không hạn chế \(a_i\), mọi bộ \(\{a_i\}\) đều có nghiệm \(x\). Nếu \(x\neq y\) thì tồn tại \(i\) sao cho \(x\not\equiv y\pmod{n_i}\). Do đó nghiệm là duy nhất modulo \(n\).
Minh họa
Giải bài “vật không biết số”:
- \(n=3\times 5\times 7=105\);
- 三人同行 七十 希: \(n_1=3, m_1=35, m_1^{-1}\equiv 2\pmod 3\), nên \(c_1=70\);
- 五树梅花 廿一 支: \(n_2=5, m_2=21, m_2^{-1}\equiv 1\pmod 5\), nên \(c_2=21\);
- 七子团圆正 半月: \(n_3=7, m_3=15, m_3^{-1}\equiv 1\pmod 7\), nên \(c_3=15\);
- Nghiệm: \(x\equiv 2\times 70+3\times 21+2\times 15\equiv 233\equiv 23 \pmod {105}\) (除 百零五 便得知).
Thuật toán Garner
CRT còn dùng để biểu diễn số lớn bằng nhiều mô-đun nhỏ.
Ví dụ, nếu \(a\) thỏa
và \(a < \prod_{i=1}^k p_i\) (với \(p_i\) nguyên tố), ta có biểu diễn cơ số hỗn hợp:
Thuật toán Garner tính các \(x_i\).
Đặt \(r_{ij}\) là nghịch đảo của \(p_i\) modulo \(p_j\):
Từ phương trình đầu:
Phương trình thứ hai:
Trừ \(x_1\), chia \(p_1\):
Tương tự:
Hiện thực
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 | |
Độ phức tạp \(O(k^2)\). Garner không yêu cầu mô-đun là nguyên tố, chỉ cần đôi một nguyên tố cùng nhau. Mã giả:
Dòng 6 chính là biểu diễn cơ số hỗn hợp.
Ứng dụng
Một số bài toán cho mô-đun không phải số nguyên tố, nhưng phân tích nhân tử cho thấy không có bình phương, tức là tích các số nguyên tố khác nhau. Khi đó có thể giải riêng từng mô-đun rồi dùng CRT ghép.
Ví dụ:
洛谷 P2480 [SDOI2010] 古代猪文
Cho \(G,n\) (\(1 \leq G,n \leq 10^9\)), tính
Nếu \(G=999~911~659\) thì kết quả là \(0\).
Ngược lại, theo định lý Euler:
Cần tính
Vì \(999~911~658\) không nguyên tố, không thể đảm bảo nghịch đảo cho mọi \(x\). Ta có \(999~911~658=2 \times 3 \times 4679 \times 35617\), mỗi thừa số xuất hiện bậc một. Vì vậy tính tổng theo từng mô-đun \(2,3,4679,35617\) rồi ghép bằng CRT.
Tức giải hệ:
Với mô-đun nguyên tố nhỏ, có thể tính \(\binom{n}{k}\) bằng định lý Lucas.
Mở rộng: mô-đun không nguyên tố cùng nhau
Hai phương trình
Cho \(x\equiv a_1 \pmod {m_1}\), \(x\equiv a_2 \pmod {m_2}\).
Viết \(x=m_1p+a_1=m_2q+a_2\) với \(p,q\) nguyên, suy ra \(m_1p-m_2q=a_2-a_1\).
Theo Bézout, nếu \(a_2-a_1\) không chia hết cho \(\gcd(m_1,m_2)\) thì vô nghiệm.
Nếu có nghiệm, dùng Euclid mở rộng tìm \((p,q)\), rồi suy ra nghiệm \(x\equiv b\pmod M\) với \(b=m_1p+a_1\), \(M=\mathrm{lcm}(m_1,m_2)\).
Nhiều phương trình
Gộp từng cặp theo cách trên.
Bài tập
Một phần nội dung dịch từ Китайская теорема об остатках và bản tiếng Anh Chinese Remainder Theorem. Bản tiếng Nga: Public Domain + Leave a Link; bản tiếng Anh: CC-BY-SA 4.0.
Last updated on this page:, Update history
Found an error? Want to help improve? Edit this page on GitHub!
Contributors to this page:OI-wiki
All content on this page is provided under the terms of the CC BY-SA 4.0 and SATA license, additional terms may apply