Các kỹ thuật thi đấu kết hợp chia hết, đồng dư và mẹo Diophantine để giải các bài toán số học.
Trực giác2 chia hết 100! bao nhiêu lần?
100! (tức 1×2×3×⋯×100) tận cùng bằng bao nhiêu số 0? Đếm mọi thừa số 10 ẩn trong tích một trăm số trông có vẻ vô vọng nếu làm trực tiếp, nhưng có một mẹo một dòng: mỗi số 0 tận cùng đến từ một thừa số 5 ghép với một thừa số 2 (và 2 nhiều hơn hẳn), nên chỉ cần đếm 5 chia hết 100! bao nhiêu lần. Mỗi bội của 5 đến 100 đóng góp ít nhất một thừa số 5 (20 bội), mỗi bội của 25 đóng góp thêm một (4 bội), và mỗi bội của 125 sẽ đóng góp thêm nữa (không có bội nào ≤100), cho 20+4=24 số 0 tận cùng. Mẹo đếm này — tìm chính xác lũy thừa của một số nguyên tố chia hết một giai thừa hay một tích khổng lồ — là cửa ngõ vào số học Olympic: các quy tắc chính xác, máy móc thay thế việc đếm trường hợp trông vô vọng bằng vài dòng số học.
Đồ thị parabol minh họa suy giảm hình học của số bội lũy thừa số nguyên tố
Cấu trúc nhân theo mô-đun m=13: theo dõi quỹ đạo và định giá p-adic νp(an−bn) biến bài toán chia hết Olympic thành số học đồng dư.
Phổ thôngĐịnh giá p-adic và công thức Legendre
Định nghĩa: Định giá p-adic
Với số nguyên tố p và số nguyên khác không n, **định giá p-adic** vp(n) là số mũ lớn nhất k sao cho pk∣n, tức n=pvp(n)⋅m với p∤m. Nó mở rộng cho tích qua vp(ab)=vp(a)+vp(b), biến phép nhân thành phép cộng, giống hệt một logarit giới hạn ở một số nguyên tố.
vp(n!)=i=1∑∞⌊pin⌋
Đây là công thức Legendre: nó đếm, với mỗi lũy thừa pi, có bao nhiêu bội của pi nằm trong {1,…,n}, và cộng dồn qua mọi i đếm đúng mỗi thừa số p ẩn trong n! một lần cho mỗi tầng nó còn tồn tại. Tổng hữu hạn trong thực tế vì ⌊n/pi⌋=0 khi pi>n. Một cách viết lại hữu ích là vp(n!)=p−1n−sp(n), với sp(n) là tổng các chữ số của n viết trong hệ cơ số p.
Với số nguyên tố p và số nguyên dương n, vp(n!)=∑i=1∞⌊pin⌋.
Vì sao đúng?
Công thức Legendre là công cụ chuẩn để tính lũy thừa nguyên tố chính xác chia hết giai thừa và hệ số nhị thức, kết hợp với định lý Kummer nó giải thích chính xác hệ số nhị thức nào chia hết cho một số nguyên tố cho trước.
Chứng minh
**Bước 1: Viết vp(n!) thành tổng theo từng thừa số.** Theo định nghĩa n!=1⋅2⋯n, nên vp(n!)=∑k=1nvp(k), tổng định giá p-adic của mọi số nguyên từ 1 đến n.
**Bước 2: Viết lại mỗi vp(k) thành một phép đếm.** Với mỗi k, vp(k)=∑i=1∞[pi∣k] (dùng ký hiệu Iverson, 1 nếu đúng, 0 nếu sai), vì k chia hết cho pi đúng với vp(k) giá trị i (cụ thể i=1,…,vp(k)).
Bước 3: Đổi thứ tự tổng. Thay vào, vp(n!)=∑k=1n∑i=1∞[pi∣k]=∑i=1∞∑k=1n[pi∣k], đổi thứ tự tổng kép (hữu hạn nên hợp lệ).
**Bước 4: Đếm trực tiếp bội của pi.** Tổng trong ∑k=1n[pi∣k] đếm có bao nhiêu số nguyên từ 1 đến n là bội của pi, đúng bằng ⌊pin⌋ (các bội là pi,2pi,…,⌊n/pi⌋⋅pi).
Bước 5: Kết luận. Thay lại, vp(n!)=∑i=1∞⌊pin⌋, hữu hạn vì ⌊n/pi⌋=0 khi pi>n, hoàn tất chứng minh.
Cho p là số nguyên tố lẻ, và a,b là các số nguyên với p∣a−b và p∤a, p∤b. Khi đó với mọi số nguyên dương n: vp(an−bn)=vp(a−b)+vp(n).
Vì sao đúng?
LTE biến câu hỏi khó về chia hết của hiệu hai lũy thừa cao thành số học đơn giản trên định giá, và là một trong những cách nhanh nhất giải bài toán Olympic hỏi lũy thừa lớn nhất của số nguyên tố chia hết biểu thức như an−bn hoặc chứng minh biểu thức đó không bao giờ (hay luôn luôn) chia hết cho một lũy thừa số nguyên tố nào đó.
Chứng minh
**Bước 1: Quy về trường hợp n=p nhờ tính nhân.** Viết n=pvp(n)⋅m với p∤m. Áp dụng lặp lại trường hợp n=p (chứng minh dưới đây) cho am,bm thay a,b cho thấy vp(an−bn)=vp((am)pvp(n)−(bm)pvp(n))=vp(am−bm)+vp(n), nên chỉ cần chứng minh vp(am−bm)=vp(a−b) khi p∤m, và chứng minh bước cơ sở vp(ap−bp)=vp(a−b)+1.
Bước 2: Chứng minh bước cơ sở bằng khai triển nhân tử. Phân tích ap−bp=(a−b)(ap−1+ap−2b+⋯+bp−1). Ta cần chỉ ra nhân tử thứ hai S=∑j=0p−1ap−1−jbj có vp(S)=1.
**Bước 3: Chỉ ra p∣S.** Vì p∣a−b, ta có a≡b(modp), nên mỗi số hạng ap−1−jbj≡bp−1−jbj=bp−1(modp). Cộng cả p số hạng, S≡p⋅bp−1≡0(modp) (dùng p∤b), nên p∣S.
**Bước 4: Chỉ ra p2∤S.** Viết a=b+pt với t nguyên (được vì p∣a−b). Khai triển mỗi số hạng ap−1−jbj=(b+pt)p−1−jbj≡bp−1−jbj+(p−1−j)ptbp−2−jbj(modp2) (khai triển nhị thức, bỏ số hạng có p2 trở lên). Cộng qua j=0,…,p−1: các số hạng dẫn đầu cộng thành pbp−1 như trước, và số hạng hiệu chỉnh cộng thành ptbp−2∑j=0p−1(p−1−j)=ptbp−2⋅2p(p−1), chia hết cho p2 (vì p lẻ, 2p−1 là số nguyên, nên hiệu chỉnh này là p2⋅(integer), tức ≡0(modp2)). Vậy S≡pbp−1(modp2), và vì p∤b, pbp−1 chia hết cho p nhưng không cho p2, cho vp(S)=1.
Bước 5: Kết hợp. Từ Bước 2–4, vp(ap−bp)=vp(a−b)+vp(S)=vp(a−b)+1. Kết hợp với phép quy ở Bước 1 (và sự kiện vp(am−bm)=vp(a−b) khi p∤m, chứng minh tương tự vì khi đó S≡mbm−1≡0(modp)), quy nạp theo vp(n) cho vp(an−bn)=vp(a−b)+vp(n) với mọi số nguyên dương n.
Nâng caoỨng dụng thực tiễn và Ví dụ minh họa
Định giá p-adic không chỉ là điều thú vị trong thi đấu: trong mật mã học, tính v2 của số lớn là bước thường quy trong lũy thừa modular nhanh và phân tích biên an toàn của các cấu trúc liên quan RSA, còn trong khoa học máy tính, đếm số bit 0 tận cùng của một số nhị phân chính là v2(n), một phép toán cơ bản dùng trong mẹo thao tác bit, cài đặt bảng băm, và mẹo kinh điển "bit thấp nhất được đặt" n&(−n) dùng trong cây Fenwick. Kỹ thuật đứng sau nhảy Vieta — dùng đối xứng bậc hai ẩn để sinh nghiệm nhỏ hơn từ nghiệm lớn hơn — là trường hợp riêng của phương pháp giáng vô hạn mà Fermat dùng để chứng minh không có nghiệm nguyên không tầm thường cho x4+y4=z4, phương pháp nay là trung tâm của các chứng minh hiện đại trong hình học Diophantine.
Ví dụ: Bit 0 tận cùng qua v2
Một cài đặt bảng băm cần tìm số bit 0 tận cùng trong biểu diễn nhị phân của số nguyên dương n=1600, bước dùng để tính n thuộc tầng nhóm nào trong một trie theo bit. Tính v2(1600).
Lời giải
Bước 1: Rút thừa số 2 lặp lại: 1600=2⋅800=22⋅400=23⋅200=24⋅100=25⋅50=26⋅25.
Bước 2: Vì 25 lẻ, không thể rút thêm thừa số 2, nên 1600=26⋅25 với 25 lẻ, cho v2(1600)=6.
Bước 3: Kiểm tra với biểu diễn nhị phân: 1600=110010000002, quả thực có đúng 6 bit 0 tận cùng, xác nhận v2(1600)=6 khớp với cách đếm bit trực tiếp và hai phương pháp (rút thừa số và đếm bit tận cùng) là cùng một phép toán.
Ví dụ: Nhảy Vieta trên bài IMO 1988 Bài 6
Cho a,b là các số nguyên dương sao cho ab+1 chia hết a2+b2. Chứng minh ab+1a2+b2 là số chính phương (bài IMO 1988 Bài 6 nổi tiếng, được coi là một trong những bài khó nhất lịch sử Olympic).
Lời giải
Bước 1: Đặt k=ab+1a2+b2 và giả sử phản chứng k là số nguyên dương không phải số chính phương. Trong tất cả các cặp (a,b) số nguyên không âm với ab+1a2+b2=k, chọn cặp có a+b nhỏ nhất, và giả sử không mất tổng quát a≥b≥0.
Bước 2: Cố định b và k, xem a2−kb⋅a+(b2−k)=0 (sắp xếp lại a2+b2=k(ab+1)) như phương trình bậc hai theo a. Nó có nghiệm a, nên theo công thức Vieta nghiệm còn lại là a′=kb−a=ab2−k.
Bước 3: Chỉ ra a′ là số nguyên (rõ từ a′=kb−a) và a′≥0: nếu a′<0 thì a′2−kba′+(b2−k)≥a′2+k+(b2−k)>0 mâu thuẫn với việc a′ là nghiệm (vì phương trình bậc hai bằng 0 tại đó và mọi số hạng trừ có thể −kba′ đều không âm khi a′<0, làm toàn biểu thức dương chặt — mâu thuẫn), nên a′≥0.
Bước 4: Chỉ ra (a′,b) là nghiệm nhỏ hơn, suy ra mâu thuẫn: vì a′=ab2−k và b<a (vì a≥b và a=b sẽ buộc k=2, số chính phương, mâu thuẫn giả thiết trừ khi a=b=0 bị loại do dương — trường hợp a=b xử lý riêng và cho phủ định k=2 trực tiếp), ta có a′=ab2−k<ab2≤aa2=a dùng b<a, chính xác hơn: a′a=b2−k<b2≤a2 nên a′<a (dùng a>0), nghĩa là cặp mới (a′,b) có a′+b<a+b, tổng nhỏ hơn chặt, trong khi vẫn thỏa a′b+1a′2+b2=k (hệ thức bậc hai đối xứng theo nghĩa thay a bằng nghiệm còn lại giữ nguyên giá trị k) — mâu thuẫn với tính nhỏ nhất của a+b.
Bước 5: Kết luận. Mâu thuẫn ở Bước 4 cho thấy không thể tồn tại phản ví dụ nhỏ nhất như vậy, nên k thực ra phải là số chính phương bất cứ khi nào nó là số nguyên dương, chứng minh khẳng định ban đầu.
Dùng công thức Legendre, v3(30!) bằng bao nhiêu?
Theo bổ đề nâng lũy thừa, với số nguyên tố p=7 khi 7∣(12−5) và 7∤12, 7∤5, v7(127−57) bằng bao nhiêu?
Trong nhảy Vieta trên ab+1a2+b2=k, cho nghiệm (a,b) với a≥b, nghiệm còn lại của phương trình bậc hai theo a là a′=kb−a. Tính chất then chốt nào của a′ cần chỉ ra để suy ra mâu thuẫn từ tính nhỏ nhất của a+b?
Giả thuyết abc, nếu được chứng minh, sẽ tổng quát hóa trực giác chia hết đứng sau bổ đề nào bàn trong chủ đề này?