MathLabs

Toán thi và Giải toán

Số học Olympic

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!100! (tức 1×2×3×⋯×1001\times 2\times 3\times\cdots\times 100) tận cùng bằng bao nhiêu số 0? Đếm mọi thừa số 1010 ẩ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ố 55 ghép với một thừa số 22 (và 22 nhiều hơn hẳn), nên chỉ cần đếm 55 chia hết 100!100! bao nhiêu lần. Mỗi bội của 55 đến 100100 đóng góp ít nhất một thừa số 55 (2020 bội), mỗi bội của 2525 đóng góp thêm một (44 bội), và mỗi bội của 125125 sẽ đóng góp thêm nữa (không có bội nào ≤100\le 100), cho 20+4=2420+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=13m = 13: theo dõi quỹ đạo và định giá pp-adic νp(an−bn)\nu_p(a^n - b^n) biến bài toán chia hết Olympic thành số học đồng dư.

Phổ thôngĐịnh giá pp-adic và công thức Legendre

Định nghĩa: Định giá pp-adic

Với số nguyên tố pp và số nguyên khác không nn, **định giá pp-adic** vp(n)v_p(n) là số mũ lớn nhất kk sao cho pk∣np^k \mid n, tức n=pvp(n)⋅mn = p^{v_p(n)} \cdot m với p∤mp \nmid m. Nó mở rộng cho tích qua vp(ab)=vp(a)+vp(b)v_p(ab) = v_p(a)+v_p(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∞⌊npi⌋v_p(n!) = \sum_{i=1}^{\infty} \left\lfloor \frac{n}{p^i} \right\rfloor

Đây là công thức Legendre: nó đếm, với mỗi lũy thừa pip^i, có bao nhiêu bội của pip^i nằm trong {1,…,n}\{1,\dots,n\}, và cộng dồn qua mọi ii đếm đúng mỗi thừa số pp ẩn trong n!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\lfloor n/p^i\rfloor = 0 khi pi>np^i > n. Một cách viết lại hữu ích là vp(n!)=n−sp(n)p−1v_p(n!) = \frac{n - s_p(n)}{p-1}, với sp(n)s_p(n) là tổng các chữ số của nn viết trong hệ cơ số pp.

vp(n!)=n−sp(n)p−1v_p(n!) = \frac{n - s_p(n)}{p-1}
Dùng công cụ nào
Công cụTốt nhất khi
Công thức LegendreLũy thừa chính xác của số nguyên tố chia hết n!n! hoặc hệ số nhị thức
Bổ đề nâng lũy thừavp(an±bn)v_p(a^n \pm b^n) khi p∣a∓bp \mid a\mp b
Nhảy VietaPhương trình Diophantine đối xứng qua phép thế bậc hai
Đồng dư mod nnLoại trừ nghiệm, lập luận tuần hoàn

Đại họcChứng minh đầy đủ: Công thức Legendre và Bổ đề nâng lũy thừa

Với số nguyên tố pp và số nguyên dương nn, vp(n!)=∑i=1∞⌊npi⌋v_p(n!) = \sum_{i=1}^{\infty} \left\lfloor \frac{n}{p^i} \right\rfloor.

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!)v_p(n!) thành tổng theo từng thừa số.** Theo định nghĩa n!=1⋅2⋯nn! = 1\cdot 2\cdots n, nên vp(n!)=∑k=1nvp(k)v_p(n!) = \sum_{k=1}^{n} v_p(k), tổng định giá pp-adic của mọi số nguyên từ 11 đến nn.

**Bước 2: Viết lại mỗi vp(k)v_p(k) thành một phép đếm.** Với mỗi kk, vp(k)=∑i=1∞[pi∣k]v_p(k) = \sum_{i=1}^{\infty} [p^i \mid k] (dùng ký hiệu Iverson, 11 nếu đúng, 00 nếu sai), vì kk chia hết cho pip^i đúng với vp(k)v_p(k) giá trị ii (cụ thể i=1,…,vp(k)i=1,\dots,v_p(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]v_p(n!) = \sum_{k=1}^n \sum_{i=1}^{\infty} [p^i \mid k] = \sum_{i=1}^{\infty} \sum_{k=1}^n [p^i \mid 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 pip^i.** Tổng trong ∑k=1n[pi∣k]\sum_{k=1}^n [p^i \mid k] đếm có bao nhiêu số nguyên từ 11 đến nn là bội của pip^i, đúng bằng ⌊npi⌋\left\lfloor \frac{n}{p^i} \right\rfloor (các bội là pi,2pi,…,⌊n/pi⌋⋅pip^i, 2p^i, \dots, \lfloor n/p^i\rfloor \cdot p^i).

Bước 5: Kết luận. Thay lại, vp(n!)=∑i=1∞⌊npi⌋v_p(n!) = \sum_{i=1}^{\infty} \left\lfloor \frac{n}{p^i} \right\rfloor, hữu hạn vì ⌊n/pi⌋=0\lfloor n/p^i \rfloor = 0 khi pi>np^i > n, hoàn tất chứng minh.

Cho pp là số nguyên tố lẻ, và a,ba,b là các số nguyên với p∣a−bp \mid a-b và p∤ap \nmid a, p∤bp \nmid b. Khi đó với mọi số nguyên dương nn: vp(an−bn)=vp(a−b)+vp(n)v_p(a^n - b^n) = v_p(a-b) + v_p(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−bna^n-b^n 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=pn=p nhờ tính nhân.** Viết n=pvp(n)⋅mn = p^{v_p(n)} \cdot m với p∤mp \nmid m. Áp dụng lặp lại trường hợp n=pn=p (chứng minh dưới đây) cho am,bma^m, b^m thay a,ba,b cho thấy vp(an−bn)=vp((am)pvp(n)−(bm)pvp(n))=vp(am−bm)+vp(n)v_p(a^n-b^n) = v_p((a^m)^{p^{v_p(n)}} - (b^m)^{p^{v_p(n)}}) = v_p(a^m-b^m) + v_p(n), nên chỉ cần chứng minh vp(am−bm)=vp(a−b)v_p(a^m - b^m) = v_p(a-b) khi p∤mp \nmid m, và chứng minh bước cơ sở vp(ap−bp)=vp(a−b)+1v_p(a^p-b^p) = v_p(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)a^p - b^p = (a-b)(a^{p-1}+a^{p-2}b+\cdots+b^{p-1}). Ta cần chỉ ra nhân tử thứ hai S=∑j=0p−1ap−1−jbjS = \sum_{j=0}^{p-1} a^{p-1-j}b^j có vp(S)=1v_p(S) = 1.

**Bước 3: Chỉ ra p∣Sp \mid S.** Vì p∣a−bp \mid a-b, ta có a≡b(modp)a \equiv b \pmod p, nên mỗi số hạng ap−1−jbj≡bp−1−jbj=bp−1(modp)a^{p-1-j}b^j \equiv b^{p-1-j}b^j = b^{p-1} \pmod p. Cộng cả pp số hạng, S≡p⋅bp−1≡0(modp)S \equiv p\cdot b^{p-1} \equiv 0 \pmod p (dùng p∤bp \nmid b), nên p∣Sp \mid S.

**Bước 4: Chỉ ra p2∤Sp^2 \nmid S.** Viết a=b+pta = b + pt với tt nguyên (được vì p∣a−bp\mid a-b). Khai triển mỗi số hạng ap−1−jbj=(b+pt)p−1−jbj≡bp−1−jbj+(p−1−j)pt bp−2−jbj(modp2)a^{p-1-j}b^j = (b+pt)^{p-1-j}b^j \equiv b^{p-1-j}b^j + (p-1-j)pt\, b^{p-2-j}b^j \pmod{p^2} (khai triển nhị thức, bỏ số hạng có p2p^2 trở lên). Cộng qua j=0,…,p−1j=0,\dots,p-1: các số hạng dẫn đầu cộng thành p bp−1p\,b^{p-1} như trước, và số hạng hiệu chỉnh cộng thành pt bp−2∑j=0p−1(p−1−j)=pt bp−2⋅p(p−1)2pt\,b^{p-2}\sum_{j=0}^{p-1}(p-1-j) = pt\,b^{p-2}\cdot\frac{p(p-1)}{2}, chia hết cho p2p^2 (vì pp lẻ, p−12\frac{p-1}{2} là số nguyên, nên hiệu chỉnh này là p2⋅(integer)p^2\cdot(\text{integer}), tức ≡0(modp2)\equiv 0 \pmod{p^2}). Vậy S≡p bp−1(modp2)S \equiv p\,b^{p-1} \pmod{p^2}, và vì p∤bp \nmid b, p bp−1p\,b^{p-1} chia hết cho pp nhưng không cho p2p^2, cho vp(S)=1v_p(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)+1v_p(a^p-b^p) = v_p(a-b) + v_p(S) = v_p(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)v_p(a^m-b^m)=v_p(a-b) khi p∤mp\nmid m, chứng minh tương tự vì khi đó S≡m bm−1≢0(modp)S \equiv m\,b^{m-1} \not\equiv 0 \pmod p), quy nạp theo vp(n)v_p(n) cho vp(an−bn)=vp(a−b)+vp(n)v_p(a^n-b^n) = v_p(a-b)+v_p(n) với mọi số nguyên dương nn.

Nâng caoỨng dụng thực tiễn và Ví dụ minh họa

Định giá pp-adic không chỉ là điều thú vị trong thi đấu: trong mật mã học, tính v2v_2 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)v_2(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)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=z4x^4+y^4=z^4, 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 v2v_2

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=1600n=1600, bước dùng để tính nn thuộc tầng nhóm nào trong một trie theo bit. Tính v2(1600)v_2(1600).

Lời giải

Bước 1: Rút thừa số 22 lặp lại: 1600=2⋅800=22⋅400=23⋅200=24⋅100=25⋅50=26⋅251600 = 2\cdot 800 = 2^2\cdot 400 = 2^3\cdot 200 = 2^4\cdot 100 = 2^5\cdot 50 = 2^6\cdot 25.

Bước 2: Vì 2525 lẻ, không thể rút thêm thừa số 22, nên 1600=26⋅251600 = 2^6\cdot 25 với 2525 lẻ, cho v2(1600)=6v_2(1600)=6.

Bước 3: Kiểm tra với biểu diễn nhị phân: 1600=1100100000021600 = 11001000000_2, quả thực có đúng 66 bit 0 tận cùng, xác nhận v2(1600)=6v_2(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,ba,b là các số nguyên dương sao cho ab+1ab+1 chia hết a2+b2a^2+b^2. Chứng minh a2+b2ab+1\frac{a^2+b^2}{ab+1} 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=a2+b2ab+1k=\frac{a^2+b^2}{ab+1} và giả sử phản chứng kk 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)(a,b) số nguyên không âm với a2+b2ab+1=k\frac{a^2+b^2}{ab+1}=k, chọn cặp có a+ba+b nhỏ nhất, và giả sử không mất tổng quát a≥b≥0a\ge b\ge 0.

Bước 2: Cố định bb và kk, xem a2−kb⋅a+(b2−k)=0a^2 - kb\cdot a + (b^2-k) = 0 (sắp xếp lại a2+b2=k(ab+1)a^2+b^2=k(ab+1)) như phương trình bậc hai theo aa. Nó có nghiệm aa, nên theo công thức Vieta nghiệm còn lại là a′=kb−a=b2−kaa' = kb - a = \frac{b^2-k}{a}.

Bước 3: Chỉ ra a′a' là số nguyên (rõ từ a′=kb−aa'=kb-a) và a′≥0a' \ge 0: nếu a′<0a'<0 thì a′2−kba′+(b2−k)≥a′2+k+(b2−k)>0a'^2 - kb a' + (b^2-k) \ge a'^2+k+(b^2-k) > 0 mâu thuẫn với việc a′a' là nghiệm (vì phương trình bậc hai bằng 00 tại đó và mọi số hạng trừ có thể −kba′-kba' đều không âm khi a′<0a'<0, làm toàn biểu thức dương chặt — mâu thuẫn), nên a′≥0a'\ge 0.

Bước 4: Chỉ ra (a′,b)(a',b) là nghiệm nhỏ hơn, suy ra mâu thuẫn: vì a′=b2−kaa'=\frac{b^2-k}{a} và b<ab<a (vì a≥ba\ge b và a≠ba\ne b sẽ buộc k=2k=2, số chính phương, mâu thuẫn giả thiết trừ khi a=b=0a=b=0 bị loại do dương — trường hợp a=ba=b xử lý riêng và cho phủ định k=2k=2 trực tiếp), ta có a′=b2−ka<b2a≤a2a=aa' = \frac{b^2-k}{a} < \frac{b^2}{a} \le \frac{a^2}{a} = a dùng b<ab<a, chính xác hơn: a′a=b2−k<b2≤a2a'a = b^2-k < b^2 \le a^2 nên a′<aa'<a (dùng a>0a>0), nghĩa là cặp mới (a′,b)(a',b) có a′+b<a+ba'+b < a+b, tổng nhỏ hơn chặt, trong khi vẫn thỏa a′2+b2a′b+1=k\frac{a'^2+b^2}{a'b+1}=k (hệ thức bậc hai đối xứng theo nghĩa thay aa bằng nghiệm còn lại giữ nguyên giá trị kk) — mâu thuẫn với tính nhỏ nhất của a+ba+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 kk 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!)v_3(30!) bằng bao nhiêu?

Theo bổ đề nâng lũy thừa, với số nguyên tố p=7p=7 khi 7∣(12−5)7\mid (12-5) và 7∤127\nmid 12, 7∤57\nmid 5, v7(127−57)v_7(12^7-5^7) bằng bao nhiêu?

Trong nhảy Vieta trên a2+b2ab+1=k\frac{a^2+b^2}{ab+1}=k, cho nghiệm (a,b)(a,b) với a≥ba\ge b, nghiệm còn lại của phương trình bậc hai theo aa là a′=kb−aa'=kb-a. Tính chất then chốt nào của a′a' cần chỉ ra để suy ra mâu thuẫn từ tính nhỏ nhất của a+ba+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?

Tài liệu tham khảo

  1. Andrew Granville, Thomas J. Tucker (2002). It's As Easy As abc
  2. Titu Andreescu, Dorin Andrica, Zuming Feng (2007). 104 Number Theory Problems: From the Training of the USA IMO Team
  3. Titu Andreescu, Dorin Andrica, Ion Cucurezeanu (2010). An Introduction to Diophantine Equations: A Problem-Based Approach