MathLabs

Số học và Lý thuyết số

Phương pháp sàng

Các kỹ thuật ước lượng số nguyên còn lại trong một khoảng sau khi loại bỏ bội của các số nguyên tố nhỏ.

Trực giácLọc bỏ bội số, từng số nguyên tố một

Hình dung một lưới số từ 2 đến 100. Gạch bỏ mọi bội của 2 trừ chính số 2. Rồi mọi bội của 3 trừ chính số 3. Rồi mọi bội của 5 trừ chính số 5. Tiếp tục với mỗi số còn sống sót, và những gì còn lại không bị gạch ở cuối chính là các số nguyên tố. Quá trình lọc cổ xưa này — một "cái sàng" — không chỉ là cách liệt kê số nguyên tố; các phương pháp sàng biến cùng ý tưởng đó thành công cụ đếm chính xác, ước lượng bao nhiêu số nguyên trong một khoảng còn sống sót qua một bộ lọc cho trước, ngay cả khi việc liệt kê từng số là bất khả thi về tính toán.

Widget tổng Riemann với n thanh, dùng làm hình minh họa cho cách số đếm chạy $S(A,\mathcal{P},z)$ của sàng co lại khi thêm bộ lọc nguyên tố; đây không phải tính toán sàng thật, vì nội dung dựng sẵn của widget này là minh họa tích phân số, không phải bộ lọc ước số.
Sàng Eratosthenes trên bảng 1..601..60: kéo nn để gạch bỏ các bội của số nguyên tố ≤n\le n (màu đỏ); các ô xanh còn sót lại là số nguyên tố.

Phổ thôngSàng Eratosthenes

Định nghĩa: Sàng Eratosthenes

Để liệt kê mọi số nguyên tố tới NN: viết ra 2,3,…,N2,3,\ldots,N; lặp lại lấy số chưa đánh dấu nhỏ nhất pp, khai báo nó là nguyên tố, và đánh dấu mọi bội của pp (bắt đầu từ p2p^2) là hợp số; dừng khi p2>Np^2 > N.

P(z)=∏p<zpP(z) = \prod_{p < z} p

Sao dừng ở p2>Np^2>N? Mọi hợp số n≤Nn\le N có một thừa số nguyên tố ≤N\le\sqrt N (nếu không, hai thừa số nguyên tố nhỏ nhất của nó sẽ nhân lại vượt quá NN), nên khi mọi số nguyên tố tới N\sqrt N đã đánh dấu xong, mọi thứ còn lại chưa đánh dấu thực sự không có thừa số nào để lộ ra — nó phải là số nguyên tố. Tích P(z)=∏p<zpP(z) = \prod_{p < z} p, trên mọi số nguyên tố p<zp<z, chính là tập hợp các số nguyên tố "nhỏ" mà sàng lọc theo; lý thuyết sàng gọi đó là mức của sàng.

Sàng [2, 30] từng bước
Bộ lọc áp dụngHợp số vừa đánh dấuSố chưa đánh dấu còn lại
p = 2 (từ 4)4,6,8,...,30 (14 số)29 − 14 = 15
p = 3 (từ 9)9,15,21,27 (4 mới)15 − 4 = 11
p = 5 (từ 25)25 (1 mới)11 − 1 = 10
Dừng: 7² = 49 > 30—10 số nguyên tố: 2,3,5,7,11,13,17,19,23,29

Đại họcHai định lý: sao sàng hoạt động, và đếm bằng nó thế nào

Một số nguyên n≥2n \ge 2 là nguyên tố khi và chỉ khi nó không chia hết cho bất kỳ số nguyên tố p≤np \le \sqrt n nào.

Vì sao đúng?

Sự tương đương này chính xác là điều cho phép sàng dừng sớm: khi mọi số nguyên tố tới N\sqrt N đã đánh dấu bội của nó xong, không còn nhân chứng nào có thể kết tội bất kỳ số còn lại là hợp số, nên kiểm tra (hay đánh dấu) các số nguyên tố lớn hơn được chứng minh là công việc lãng phí.

Chứng minh

(⇐\Leftarrow) Giả sử nn không có thừa số nguyên tố ≤n\le\sqrt n. Nếu nn là hợp số, viết n=abn=ab với 1<a≤b<n1<a\le b<n. Khi đó a≤na\le\sqrt n (nếu không a>na>\sqrt n và b≥a>nb\ge a>\sqrt n sẽ buộc ab>nab>n, mâu thuẫn), và thừa số nguyên tố nhỏ nhất pp của aa thỏa p≤a≤np\le a\le\sqrt n, nên pp là thừa số nguyên tố của nn với ≤n\le\sqrt n — mâu thuẫn giả thiết. Vậy nn không có phân tích như vậy, nên nn là nguyên tố.

(⇒\Rightarrow) Nếu nn là nguyên tố, ước dương duy nhất của nó là 11 và nn; không số nguyên tố p<np<n nào chia hết nó cả, nên đặc biệt không số nào với p≤np\le\sqrt n chia hết.

Cùng nhau, hai điều này cho thấy hai điều kiện tương đương, chính xác là tiêu chí dừng dùng trong sàng: sau khi xử lý mọi số nguyên tố tới N\sqrt N, mọi thứ còn chưa đánh dấu trong [2,N][2,N] thỏa vế phải, do đó là nguyên tố.

Với A={1,2,…,x}A=\{1,2,\ldots,x\} và P\mathcal P là tập số nguyên tố p<zp<z, số a∈Aa \in A nguyên tố cùng P(z)=∏p<zpP(z)=\prod_{p<z}p là S(A,P,z)=∑d∣P(z)μ(d)⌊xd⌋\displaystyle S(A,\mathcal P,z)=\sum_{d \mid P(z)} \mu(d)\Big\lfloor \dfrac{x}{d} \Big\rfloor, với μ\mu là hàm Möbius; lấy z=x+1z=\sqrt x+1 cho π(x)−π(x)+1=S(A,P,x)=∑d∣P(x)μ(d) ⌊x/d⌋\pi(x)-\pi(\sqrt{x})+1 = S(A,\mathcal{P},\sqrt{x}) = \sum_{d \mid P(\sqrt{x})} \mu(d)\, \lfloor x/d \rfloor.

Vì sao đúng?

Đây là phiên bản chính xác, định lượng của "gạch bỏ bội số": thay vì đánh dấu vật lý trên lưới, nó đếm trực tiếp số sống sót bằng bù trừ trên các số nguyên tố nhỏ chia hết chúng. Đây là tổ tiên của mọi sàng hiện đại (Brun, Selberg, sàng lớn, GPY) dùng để tấn công số nguyên tố sinh đôi và khoảng cách bị chặn — tất cả về cơ bản đều là những cách thông minh hơn để kiểm soát các số hạng sai số mà chính công thức này sinh ra.

Chứng minh

Mọi số nguyên a∈Aa\in A nguyên tố cùng P(z)P(z) khi và chỉ khi không chia hết cho bất kỳ số nguyên tố p<zp<z nào. Với mỗi ước d∣P(z)d\mid P(z) (tích không chính phương của một tập con các số nguyên tố này), số bội của dd trong A={1,…,x}A=\{1,\ldots,x\} chính xác là ⌊x/d⌋\lfloor x/d\rfloor.

Theo bù trừ trên các biến cố "p∣ap\mid a" với p<zp<z: số a∈Aa\in A chia hết bởi ít nhất một số nguyên tố trong P\mathcal P là ∑p<z⌊x/p⌋−∑p<q⌊x/(pq)⌋+∑p<q<r⌊x/(pqr)⌋−⋯\sum_{p<z}\lfloor x/p\rfloor - \sum_{p<q}\lfloor x/(pq)\rfloor + \sum_{p<q<r}\lfloor x/(pqr)\rfloor - \cdots, đổi dấu theo số lượng số nguyên tố nhân lại. Mỗi dấu đổi như vậy chính xác là hàm Möbius μ(d)\mu(d) của d∣P(z)d\mid P(z) không chính phương tương ứng: μ(1)=1\mu(1)=1, μ(d)=(−1)k\mu(d)=(-1)^k với dd là tích kk số nguyên tố khác nhau.

Vậy số chia hết bởi ít nhất một số nguyên tố trong P\mathcal P là −∑d∣P(z), d>1μ(d)⌊x/d⌋-\sum_{d\mid P(z),\,d>1}\mu(d)\lfloor x/d\rfloor. Trừ điều này khỏi ∣A∣=⌊x⌋=x|A|=\lfloor x\rfloor=x (số hạng d=1d=1, μ(1)⌊x/1⌋=x\mu(1)\lfloor x/1\rfloor=x) cho số nguyên tố cùng P(z)P(z): S(A,P,z)=x−∑d∣P(z),d>1μ(d)⌊x/d⌋=∑d∣P(z)μ(d)⌊x/d⌋S(A,\mathcal P,z)=x-\sum_{d\mid P(z),d>1}\mu(d)\lfloor x/d\rfloor=\sum_{d\mid P(z)}\mu(d)\lfloor x/d\rfloor.

Cuối cùng, lấy z=x+1z=\sqrt x+1 để P\mathcal P chính xác là các số nguyên tố ≤x\le\sqrt x: bất kỳ a∈[2,x]a\in[2,x] nguyên tố cùng mọi số này hoặc là 11 hoặc là số nguyên tố >x>\sqrt x (theo định lý ở trên, vì nó không có thừa số nguyên tố ≤x\le\sqrt x), nên S(A,P,x+1)=1+(π(x)−π(x))S(A,\mathcal P,\sqrt x+1)=1+\big(\pi(x)-\pi(\sqrt x)\big), cho đẳng thức đã nêu.

π(x)−π(x)+1=S(A,P,x)=∑d∣P(x)μ(d) ⌊x/d⌋\pi(x)-\pi(\sqrt{x})+1 = S(A,\mathcal{P},\sqrt{x}) = \sum_{d \mid P(\sqrt{x})} \mu(d)\, \lfloor x/d \rfloor

Đại họcỨng dụng thực tiễn và Ví dụ minh họa

Phương pháp sàng cung cấp sức mạnh cho cả tính toán thực tế lẫn những đột phá toán học thuần túy sâu sắc. Trong phần mềm, các phiên bản phân đoạn của sàng Eratosthenes là thuật toán chuẩn để liệt kê số nguyên tố ở quy mô lớn, và một bước sàng số nguyên tố nhỏ nhanh là lượt lọc đầu tiên phổ quát trước khi chạy các phép kiểm tra tính nguyên tố đắt đỏ (như Miller–Rabin) trong sinh khóa RSA — loại bỏ ~80% ứng viên lẻ ngẫu nhiên trong vài micro-giây. Trong toán học thuần túy, các sàng tinh chỉnh (Brun, Selberg, GPY, Maynard–Tao) là động cơ đằng sau mọi đột phá hiện đại về khoảng cách giữa các số nguyên tố.

Ví dụ: Đếm số nguyên tố tới 30 bằng công thức Legendre

Áp dụng công thức Legendre với x=30x=30 và z=6z=6 (nên các số nguyên tố sàng là 2,3,52,3,5, vì 30≈5.48\sqrt{30}\approx 5.48) để tính π(30)\pi(30) từ đầu.

Lời giải

Ở đây P(6)=2⋅3⋅5=30P(6)=2\cdot3\cdot5=30, có 23=82^3=8 ước không chính phương là 1,2,3,5,6,10,15,301,2,3,5,6,10,15,30.

Tính μ(d)⌊30/d⌋\mu(d)\lfloor30/d\rfloor cho mỗi ước: +⌊30/1⌋=30+\lfloor30/1\rfloor=30; −⌊30/2⌋−⌊30/3⌋−⌊30/5⌋=−15−10−6=−31-\lfloor30/2\rfloor-\lfloor30/3\rfloor-\lfloor30/5\rfloor=-15-10-6=-31; +⌊30/6⌋+⌊30/10⌋+⌊30/15⌋=+5+3+2=+10+\lfloor30/6\rfloor+\lfloor30/10\rfloor+\lfloor30/15\rfloor=+5+3+2=+10; −⌊30/30⌋=−1-\lfloor30/30\rfloor=-1.

Cộng lại cho S(A,P,6)=30−31+10−1=8S(A,\mathcal P,6)=30-31+10-1=8. Theo đẳng thức Legendre π(30)−π(30)+1=8\pi(30)-\pi(\sqrt{30})+1=8, và π(30)=π(5)=3\pi(\sqrt{30})=\pi(5)=3 (các số nguyên tố 2,3,52,3,5), nên π(30)=8+3−1=10\pi(30)=8+3-1=10 — khớp với 1010 số nguyên tố liệt kê trong bảng trên.

Ví dụ: Sàng sơ bộ bằng số nguyên tố nhỏ tiết kiệm bao nhiêu công việc trong sinh khóa RSA?

Trước khi chạy phép kiểm tra Miller–Rabin đắt đỏ trên một ứng viên lẻ ngẫu nhiên, một thư viện RSA trước hết kiểm tra xem nó có chia hết cho 3,5,7,11,133,5,7,11,13 không. Tỉ lệ nào của các số nguyên lẻ ngẫu nhiên sống sót qua bước sàng sơ bộ 5 số nguyên tố này?

Lời giải

Theo Định lý phần dư Trung Hoa, các lớp thặng dư theo các số nguyên tố khác nhau 3,5,7,11,133,5,7,11,13 (và 22, đã cố định là lẻ) độc lập trên một chu kỳ đầy đủ 2⋅3⋅5⋅7⋅11⋅13=30,0302\cdot3\cdot5\cdot7\cdot11\cdot13=30{,}030.

Một số nguyên lẻ ngẫu nhiên không chia hết cho pp với xác suất 1−1/p1-1/p, nên tỉ lệ sống sót qua cả năm bộ lọc là (1−1/3)(1−1/5)(1−1/7)(1−1/11)(1−1/13)=23⋅45⋅67⋅1011⋅1213=576015015=3841001≈38.4%(1-1/3)(1-1/5)(1-1/7)(1-1/11)(1-1/13)=\frac23\cdot\frac45\cdot\frac67\cdot\frac{10}{11}\cdot\frac{12}{13}=\frac{5760}{15015}=\frac{384}{1001}\approx38.4\%.

Vậy năm phép kiểm tra số dư nhỏ — vài chu kỳ CPU — loại bỏ hơn 61%61\% ứng viên hợp số lẻ trước khi phép kiểm tra lũy thừa mô-đun đắt đỏ được gọi; các thư viện thực tế mở rộng bước sàng sơ bộ này tới vài trăm số nguyên tố đầu tiên, loại bỏ ~80–90% hợp số gần như miễn phí.

Khi sàng [2, 200] bằng sàng Eratosthenes, số nguyên tố lớn nhất cần gạch bội số là số nào?

Giá trị của hàm Möbius μ(30) bằng bao nhiêu?

"Rào cản chẵn lẻ" trong lý thuyết sàng là gì?

Tỉ lệ nào của số nguyên lẻ ngẫu nhiên không chia hết cho 3 hoặc 5?

Tài liệu tham khảo

  1. Alina Carmen Cojocaru, M. Ram Murty (2005). An Introduction to Sieve Methods and Their Applications
  2. Yitang Zhang (2014). Bounded gaps between primes · DOI:10.4007/annals.2014.179.3.7
  3. James Maynard (2015). Small gaps between primes · DOI:10.4007/annals.2015.181.1.7