Back to Home

Thuật toán AKS - Kiểm tra số nguyên tố thời gian đa thức

Trải qua nhiều thế kỷ, con người đã có biết bao nỗ lực tìm kiếm thuật toán hữu hiệu để tìm hiểu số nguyên tố. Bài toán xác định một số có phải là số nguyên tố hay không được xếp vào loại NP - không có thuật toán tất định (một số thuật toán khác như Miller-Rabin là loại thuật toán dựa trên xác suất) trong thời gian đa thức. Cho đến năm 2002, ba nhà khoa học người Ấn Độ là Agrawal, Kayal, Saxena đăng bài báo về thuật toán AKS đưa ra phương pháp kiểm tra số nguyên tố trong thời gian đa thức, đã phá vỡ “lời nguyền“ thiên niên kỷ (khởi đầu từ thuật toán Sàng Eratosthenes ca. 240BC).

Định lý Fermat nhỏ

Đây là định lý làm nền tảng cho thuật toán này. Định lý được phát biểu như sau:

Nếu pp là số nguyên tố, và aa là một số nguyên không chia hết cho pp, ta luôn có:

app(modp)a^p \equiv p (\bmod p)

Bạn có thể tìm thấy rất nhiều phương pháp chứng minh định lý thú vị này. Mình xin giới thiệu một phương pháp chứng minh rất đẹp dưới đây.

Chứng Minh

Gọi S={1,2,,p1}S=\{1,2,\dots,p-1\} xét tập hợp aS={1a,2a,,(p1)a}(modp)aS = \{1a,2a,\dots,(p-1)a\} (\bmod p). Nhận xét:

  1. Tất cả các phần tử ai,1ip1ai, 1 \le i \le p-1 không chia hết cho pp

  2. Với 1i,jp11 \le i,j \le p-1, nếu aiaj(modp)ai \equiv aj (\bmod p)gcd(a,p)=1\gcd(a,p)=1 nên ij(modp)    i=ji \equiv j (\bmod p) \implies i=j

Từ 1 & 2 ta suy ra tất cả các phần tử của aS(modp)aS (\bmod p) là phân biệt nhau, như vậy ta có:

aS(modp)={1,2,,p1}    i=1p1ia=1a×2a××(p1)a1×2××(p1)(modp)    ap11(modp)    apa(modp)\begin{align*} aS (\bmod p) &= \{1,2,\dots,p-1\} \\ \iff \prod_{i=1}^{p-1}ia = 1a\times 2a \times \dots \times (p-1)a &\equiv 1 \times 2 \times \dots \times (p-1) (\bmod p) \\ \iff a^{p-1} &\equiv 1 (\bmod p) \\ \iff a^p &\equiv a (\bmod p) \end{align*}

Mở rộng định lý Fermat nhỏ trên đa thức

Let aZ,nN,n2,(a,n)=1 then(x+a)nxn+a(modn) if and only if n is a prime number\begin{align*} &\text{Let } a \in \mathbb Z, n \in \mathbb N, n \ge 2, (a,n)=1 \text{ then} \\ &(x+a)^n \equiv x^n + a (\mod n) \text{ if and only if } n \text{ is a prime number} \end{align*}

Đây là mệnh đề tương đương nên ta sẽ phải chứng minh 2 vế.

Vế 1: Nếu nn là số nguyên tố thì (x+a)nxn+a(modn)(x+a)^n \equiv x^n + a (\mod n)

Xét:

(x+a)n(xn+a)=xn+(n1)xn1a+(n2)xn2a2++(nn1)xan1+an(xn+a)=(n1)xn1a+(n2)xn2a2++(nn1)xan1+(ana)=i=1n1(ni)xniai+(ana)\begin{align*} (x+a)^n - (x^n + a) &= x^n + \binom{n}{1}x^{n-1}a + \binom{n}{2}x^{n-2}a^2 + \dots + \binom{n}{n-1}xa^{n-1} + a^n - (x^n + a) \\ &=\binom{n}{1}x^{n-1}a + \binom{n}{2}x^{n-2}a^2 + \dots + \binom{n}{n-1}xa^{n-1} + (a^n - a) \\ &= \sum_{i=1}^{n-1} \binom n i x^{n-i}a^i + (a^n - a) \end{align*}

nn là số nguyên tố nên anaa^n-a chia hết cho nn. Mặt khác, tất cả các tham số (nk)=n!k!(nk)!\displaystyle \binom {n} {k} = \frac {n!}{k! (n-k)!} đều là số nguyên nên cũng đều phải chia hết cho nn.

Vế 2: Nếu (x+a)nxn+a(modn)(x+a)^n \equiv x^n + a (\mod n)với mọi a,xa,x là biến số bất kỳ thì nnlà số nguyên tố.

Ta chứng minh bằng phản chứng. Nếu nn là hợp số, gọi qq là một thừa số nguyên tố của nn, và qknq^k|n (nn chia hết cho qkq^k). Xét tham số (nq)xqanq\displaystyle \binom n q x^q a^{n-q}, ta có:

  • (nq)\displaystyle \binom n qkhông chia hết cho qkq^kn!n!trên tử số đã chia cho q!q! ở mẫu số nên không còn đủ lũy thừa của qkq^k

  • anqa^{n-q} nguyên tố cùng nhau với qkq^k

Vậy tham số của xqx^q(nq)anq\displaystyle \binom n q a^{n-q} không chia hết cho nn với mọi a,xa,x bất kỳ (trái với giả thiết)

Từ chứng minh của vế 1 & vế 2, ta kết luận định lý trên đúng.

Mấu chốt của thuật toán

Định lý trên làm tiền đề mở ra một phương pháp mới để kiểm tra nn có phải số nguyên tố hay không bằng cách chọn một giá trị aa và thay vào định lý trên để kiểm tra có thỏa điều kiện không. Tuy nhiên, để tính được (x+a)n(x+a)^n, ta vẫn phải tính các hệ số của đa thức khi khai triển ra và vì thế chúng ta vẫn phải tính n+1n+1 lần làm cho độ phức tạp thuật toán vẫn không giảm. Tuy nhiên ta có thể hạ bậc của (x+a)nxn+a(x+a)^n \equiv x^n+a bằng cách đem cả hai vế chia lấy phần dư cho đa thức xr1x^r - 1, với một gía trị rr được chọn đủ nhỏ, đa thức phần dư sẽ có bậc nhỏ hơn rr và làm giảm độ phức tạp thuật toán.

Tính nhanh (x+a)nmodxr1(x+a)^n \bmod x^r -1

Để ý rằng, để tính (x+a)nmod(xr1)(x+a)^n \bmod (x^r-1), chúng ta có thể áp dụng phương pháp liên tục bình phương và chia lấy phần dư để tiết kiệm tính toán thay vì phải tính n+1n+1hệ số rồi mới đem chia.

Ví dụ:

(x+1)5mod(x21)=(x+1)(x+1)4mod(x21)=((x+1)mod(x21)x+1)(((x+1)2)2(x+1)4mod(x21))=(x+1)((x+1)2mod(x21)2x+2)2=(x+1)((2x+2)2mod(x21)8x+8)=(x+1)(8x+8)mod(x21)=16x+6\begin{align*} (x+1)^5 \bmod (x^2-1) &= (x+1)(x+1)^4 \bmod (x^2-1) \\ &= (\underbrace{(x+1) \bmod (x^2-1)}{x+1})(\underbrace{((x+1)^2)^2}{(x+1)^4} \bmod (x^2-1)) \\ &=(x+1)(\underbrace{(x+1)^2 \bmod (x^2-1)}{2x+2})^2 \\ &=(x+1)(\underbrace{(2x+2)^2 \bmod (x^2-1)}{8x+8}) \\ &=(x+1)(8x+8) \bmod (x^2-1) = 16x+6 \end{align*}

Nghĩa là, thay vì dạng gốc, ta sẽ kiểm tra dạng rút gọn như dưới đây:

(x+a)nxn+a(xr1,modn)()\boxed{(x+a)^n \equiv x^n + a (x^r - 1,\bmod n)} (**)

Tiếp tục, tính nhanh xn+amodxr1x^n+a \bmod x^r-1

Biểu thức trên có thể tính dễ dàng trong O(1)O(1) như sau:

xn+amodxr1={a+1, if rnxnmodr+a, otherwisex^n+a \bmod x^r-1 = \begin{cases} a+1, \quad \text{ if } r|n \\ x^{n \bmod r} + a, \quad \text{ otherwise} \end{cases}

Ví dụ: x5+3modx31=x2+3x^5+3 \bmod x^3 - 1 = x^2+3, và x4+2modx21=3x^4 + 2 \bmod x^2-1 = 3.

Bạn có thể tự chứng minh điều này dễ dàng.

Đây là ý tưởng chính và là điểm mấu chốt của thuật toán AKS. Kể từ phần sau phần này, mình sẽ chỉ đưa ra tóm tắt ý tưởng mà không chứng minh vì trong bài báo gốc đã chứng minh khá ổn, các bạn đọc đến đây, có thể tự tham khảo lại từ bài báo gốc.

Định lý AKS (định lý chính)

Bây giờ vấn đề đặt ra là, có nn là hợp số và vẫn thỏa mãn điều kiện (**): (x+a)nxn+a(xr1,modn)(x+a)^n \equiv x^n + a (x^r-1, \bmod n)nhưng lại không thỏa (*): (x+a)nxn+a(modn)(x+a)^n \equiv x^n + a (\bmod n). May mắn thay, vấn đề này được giải quyết thông qua định lý AKS, phát biểu lại từ thuật toán:

Cho giá trị rr nguyên tố cùng nhau với nn sao cho or(n)>log2no_r(n) \gt \log^2n, với or(n)o_r(n) là cấp của nhóm nhân (Z/rZ)×(\mathbb Z / r \mathbb Z)^{\times}( hay nói cách khác, các phần tử nimodr,n^i \bmod r,với 1ilog2n1 \le i \le \log^2 n phân biệt nhau). Giả sử với mọi giá trị 1aO(rlogn)1\le a \le O(r\log n)đều thỏa mãn tính chất (x+a)nxn+a(xr1,modn)(x+a)^n \equiv x^n + a (x^r - 1,\bmod n), và gcd(a,n)=1\gcd (a,n)=1thì nn hoặc là một số nguyên tố, hoặc là một lũy thừa của một số nguyên tố.

Sự tồn tại của giá trị rr

Từ đầu đến giờ, chúng ta đã đi thông qua các ý tưởng sau:

  • Dùng định lý Fermat nhỏ mở rộng để biến bài toán thành dạng đa thức

  • Giảm bậc của đa thức gốc bằng cách modulo cho xr1x^r-1

  • Chứng minh rằng với một số giá trị của rr1aO(rlogn)1\le a \le O(r\log n) thỏa mãn (**), thì sẽ là số nguyên tố hoặc lũy thừa của một số nguyên tố.

Nghĩa là, ta sẽ xét tất cả các giá trị aa trong khoảng 1aO(rlogn)1\le a \le O(r\log n) để kiểm tra nn có phải số nguyên tố hay không. Điều cuối cùng, ta cần chứng minh là tồn tại một giá trị rr tốt, phù hợp để làm cho độ phức tạp bài toán thành đa thức với bổ đề chứng minh về sự tồn tại của rr:

Tồn tại r=O(logn)r=O(\log n), và gcd(r,n)=1\gcd (r,n) = 1 sao cho or(n)>log2no_r(n) \gt \log^2n, với or(n)o_r(n)là cấp của nhóm nhân (Z/rZ)×(\mathbb Z / r \mathbb Z)^{\times}.

Demo

Lời bàn

Đây là chi tiết về các bước của thuật toán trong bài báo:

Thuật toán AKS có độ phức tạp khoảng O(r3/2(logn)3)O(r^{3/2}(\log n)^3) với chi tiết như sau:

  • Kiểm tra nn có phải là một lũy thừa cần O((logn)3)O((\log n)^3)

  • Tìm kiếm rr thỏa or(n)>(logn)2o_r(n) \gt (\log n)^2 cần O(r(logn)2)O(r(\log n)^2)

  • Kiểm tra gcd(a,n)>1\gcd (a,n) > 1cho các giá trị ara \le r cần O(r(logn)2)O(r(\log n)^2)

  • Kiểm tra (x+a)nxn+a(modn,xr1)(x+a)^n \equiv x^n + a (\bmod n, x^r - 1)cho a=1,2,[rlogn]a=1,2,\dots [\sqrt r \log n], mỗi bước cần O(r3/2(logn)3)O(r^{3/2}(\log n)^3)

Tóm lại, thuật toán bị ảnh hưởng lớn bởi cách chọn rr, tuy nhiên có một giới hạn là r>(logn)2r>(\log n)^2, điều này có nghĩa là thuật toán có giới hạn chặn dưới là O((logn)6)O((\log n)^6)… Một con số khá ấn tượng, tuy rằng vẫn chưa thể so sánh với Miller-Rabin, nhưng dù sao cũng là cơ sở để chúng ta hy vọng về một phương pháp xuất sắc hơn trong tương lai.

Comments

0/300

Leave name/email blank to comment anonymously

No comments yet. Be the first to comment!