Nghịch đảo Möbius
Kiến thức tiền đề: Phân khối số học、Tích Dirichlet
Molbius inversion là nội dung quan trọng trong số học.Với một số hàm \(f(n)\), nếu khó tính trực tiếp giá trị của nó mà lại dễ tính tổng theo bội hoặc tổng theo ước \(g(n)\), thì có thể dùng phép đảo Möbius để đơn giản hóa tính toán và suy ra \(f(n)\).
Hàm Möbius
Hàm Möbius (Möbius function) được định nghĩa là
Cụ thể, giả sử số nguyên dương \(n\) có phân tích thừa số nguyên tố \(n=\prod_{i=1}^kp_i^{e_i}\), trong đó \(p_i\) là số nguyên tố, \(e_i\) là số nguyên dương.Thì ba trường hợp tương ứng là:
- \(\mu(1) = 1\);
- Khi tồn tại \(i\) sao cho \(e_i > 1\), tức là tồn tại bất kỳ thừa số nguyên tố nào xuất hiện quá một lần, thì \(\mu(n)=0\);
- Ngược lại, với mọi \(i\) đều có \(e_i = 1\), tức là mọi thừa số nguyên tố đều chỉ xuất hiện một lần, thì \(\mu(n)=(-1)^k\), trong đó \(k\) là số lượng thừa số nguyên tố phân biệt.
Tính chất
Theo định nghĩa, hàm Möbius \(\mu(n)\) là hàm tích tính, nhưng không phải là hàm tích hoàn toàn. Ngoài ra, tính chất quan trọng nhất là đẳng thức sau:
Tính chất
Với số nguyên dương \(n\),
Trong đó \([\cdot]\) là Iverson bracket.
Chứng minh
Giả sử \(n=\prod_{i=1}^kp_i^{e_i}\), đặt \(n' = \prod_{i=1}^kp_i\).Theo hệ thức nhị thức, ta có
Dùng tích Dirichlet, biểu thức này có thể viết thành \(\varepsilon = 1 * \mu\).Nói cách khác, hàm Möbius là Dirichlet inverse của hàm hằng \(1\).
Điều này có một ứng dụng rất phổ biến:
Nó chuyển đổi điều kiện nguyên tố thành biểu thức tổng về hàm Möbius, thuận tiện cho việc suy luận tiếp theo.
Cách tính
Nếu cần tính giá trị của hàm Möbius \(\mu(n)\) cho một số \(n\), có thể dùng phân tích thừa số nguyên tố. Ví dụ, khi \(n\) không quá lớn, có thể tính được \(\mu(n)\) trong \(O(\sqrt{n})\) thời gian.
Tham khảo thực hiện
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Nếu cần tính trước \(n\) số nguyên dương, có thể dùng tính tích tính của hàm, bằng cách dùng sieve trong \(O(n)\) thời gian.
Tham khảo thực hiện
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Đảo Molbius
Molbius inversion là ứng dụng quan trọng nhất của hàm Möbius.
Đảo Molbius
Giả sử \(f(n),g(n)\) là hai hàm số học. Thì
Chứng minh một
Trực tiếp chứng minh, ta có:
Chuyển đổi quan trọng nhất là đổi thứ tự tổng, và nhận thấy rằng \(k\mid d\mid n\) tương đương với \(\dfrac{n}{d}\mid\dfrac{n}{k}\).Điểm thứ hai tương đương với tổng các hàm Möbius tại vị trí \(\dfrac{n}{d}\), nên bằng \(\left[\dfrac{n}{k} = 1\right]\).Biểu thức này chỉ không bằng \(0\) tại \(n=k\) cuối cùng sẽ được \(g(n)\).
Chứng minh hai
Dùng tích Dirichlet, mệnh đề tương đương với
Dùng \(1 * \mu = \varepsilon\) , thực hiện tích với \(\mu\) ở cả hai bên của đẳng thức, ta được
Trong các bài toán liên quan đến các mối quan hệ chia hết, Molbius inversion là công cụ mạnh mẽ.
Ví dụ
-
Hàm Euler \(\varphi(n)\) thỏa mãn mối quan hệ \(n = \sum_{d\mid n}\varphi(d)\), tức là \(\mathrm{id}=1*\varphi\).Đối nó thực hiện đảo, ta được \(\varphi = \mu * \mathrm{id}\), tức là
\[ \varphi(n) = \sum_{d\mid n}d\mu\left(\dfrac{n}{d}\right). \] -
Hàm chia số \(\sigma_k(n) = \sum_{d\mid n}d^k\) , tức là \(\sigma_k = 1 * \mathrm{id}_k\).Đối nó thực hiện đảo, ta được \(\mathrm{id}_k = \mu * \sigma_k\) , tức là
\[ n^k = \sum_{d\mid n}\mu\left(\dfrac{n}{d}\right)\sigma_k(d). \] -
Hàm số lượng thừa số nguyên tố phân biệt \(\omega(n)=\sum_{d\mid n}[d\in\mathbf P]\) , tức là \(\omega = 1* \mathbf{1}_{\mathbf P}\), trong đó \(\mathbf{1}_{\mathbf P}\) là hàm chỉ thị tập số nguyên tố \(\mathbf P\).Đối nó thực hiện đảo, ta được \(\mathbf{1}_{\mathbf P} = \mu * \omega\) , tức là
\[ [n\in\mathbf P] = \sum_{d\mid n}\mu\left(\dfrac{n}{d}\right)\omega(d). \] -
Xét hàm số thỏa mãn \(\log n = \sum_{d\mid n}\Lambda(d)\), nó chính là hàm số học của logarit, còn gọi là von Mangoldt function:
\[ \Lambda(n) = \sum_{d\mid n}\mu\left(\dfrac{n}{d}\right)\log d = \begin{cases} \log p, & n = p^e,~p\in\mathbf P,~e\in\mathbf N_+, \\ 0, &\text{otherwise}. \end{cases} \]
Phụ chú: \(\Lambda(n)\) biểu thức chứng minh
Với số nguyên tố lũy thừa \(n=p^e~(e\in\mathbf N_+)\), ta có
Với \(n=1\), rõ ràng có \(\Lambda(n)=\log 1=0\).Với các hợp số khác \(n\), ta có
Theo tính chất của hàm Möbius, hệ số của \(\log n\) là \([n=1]=0\).Với phần sau, có thể phân tích \(d\) thành tích các thừa số nguyên tố.Với bất kỳ số nguyên tố \(p\mid n\), xét hệ số của \(\log p\), đều có:
Như vậy, với các hợp số có nhiều hơn một thừa số nguyên tố, đều có \(\Lambda(n)=0\).
Dạng mở rộng
Ngoài dạng cơ bản, Molbius inversion còn có một số dạng mở rộng phổ biến. Trước hết, có thể xem xét dạng bội.
Dạng mở rộng một
Giả sử \(f(n),g(n)\) là hai hàm số học. Thì
Chứng minh
Trực tiếp chứng minh, ta có:
Đây là đối xứng hoàn toàn với dạng cơ bản.
Thứ hai, Molbius inversion không chỉ giới hạn ở phép cộng, nó thực ra đúng với mọi Abel group trong toán học. Ví dụ, nó có dạng nhân như sau:
Dạng mở rộng hai
Giả sử \(f(n),g(n)\) là hai hàm số học. Thì
Chứng minh
Trực tiếp chứng minh, ta có:
Trong đó, \(a\uparrow b = a^b\) là Knuth arrow. So sánh với chứng minh dạng cơ bản, khác biệt duy nhất là cộng thay bằng nhân, và nhân thay bằng lấy lũy thừa.
Từ góc nhìn tích Dirichlet, Molbius inversion chỉ dùng đến việc "Möbius function is the Dirichlet inverse of the constant function \(1\)".Dễ hình dung, mối quan hệ tương tự như vậy cũng thành lập với các hàm Dirichlet ngược.
Dạng mở rộng ba
Giả sử \(f(n),g(n),\alpha(n)\) đều là hàm số học, và \(\alpha^{-1}(n)\) là Dirichlet inverse của \(\alpha(n)\), tức là
Thì
Chứng minh
Trực tiếp chứng minh, ta có:
So sánh với chứng minh dạng cơ bản, chỉ cần thay đổi đẳng thức thứ hai.
Định lý
Giả sử \(f(n),g(n)\) là hàm số học, và \(t(n)\) là hàm hoàn toàn tích tính. Thì
Chứng minh
Theo tính chất của tích Dirichlet, với hàm hoàn toàn tích tính \(t(n)\), Dirichlet inverse của nó là \(\mu(n)t(n)\).
Cuối cùng, Molbius inversion có thể mở rộng đến các hàm phức trị trên \([1,+\infty)\), không chỉ giới hạn ở các hàm số học. Dạng cơ bản của Molbius inversion có thể xem là trường hợp đặc biệt của các hàm phức trị tại tất cả các điểm không nguyên.
Dạng mở rộng bốn
Giả sử \(F(x)\) và \(G(x)\) đều là các hàm phức trị trên \([1,+\infty)\). Thì
Chứng minh
Không mất tổng quát, bổ sung định nghĩa, giả sử khi \(x < 1\) thì \(F(x)=G(x)=0\).Thì mệnh đề tương đương với:
Những biểu thức này đều là tổng trên \(n\in\mathbf N_+\).
Trực tiếp chứng minh, ta có:
Trong đó, để được đẳng thức thứ hai, cần đặt \(k = nd\).
Định lý
Giả sử \(f(n),g(n)\) là hàm số học. Thì
Chứng minh
Chỉ cần lấy \(F(x)=f(\lfloor x\rfloor)\) và \(G(x)=g(\lfloor x\rfloor)\).
Những dạng mở rộng này có thể kết hợp với nhau, tạo thành các mối quan hệ phức tạp hơn.
Dirichlet prefix sum
Kiến thức tiền đề: Prefix sum and difference
Xét mối quan hệ cơ bản của Molbius inversion:
Phía trái, \(f(n)\) là tổng các giá trị \(g(n)\) tại các ước của \(n\).Nếu hiểu \(a\mid b\) là \(a\) đứng trước \(b\), thì \(f(n)\) có thể hiểu là tổng theo nghĩa nào đó của \(g(n)\).Do đó, trong cộng đồng thi đấu, việc tìm ra \(\{f(k)\}_{k=1}^n\) từ \(\{g(k)\}_{k=1}^n\) gọi là Dirichlet prefix sum, tương ứng là Dirichlet difference.Các phương pháp này thường xuất hiện trong các bài toán cần xử lý trước một số hàm số học tại các điểm đầu tiên.
Tiếp theo, thảo luận về cách tính Dirichlet prefix sum. Nếu xem mỗi số nguyên tố là một chiều, đây là một dạng tổng nhiều chiều. Nhớ lại thuật toán tổng theo chiều: duyệt từng chiều, và cộng tất cả các giá trị tại mỗi vị trí vào vị trí tiếp theo. Với hàm số học, điều này tương đương với việc duyệt từ nhỏ đến lớn tất cả các số nguyên tố \(p\) , và cộng giá trị tại \(n\) vào \(np\).Đây là thứ tự duyệt của Eratosthenes sieve. Do đó, thuật toán này có thể tính được tổng Dirichlet của một dãy dài \(n\) trong \(O(n\log\log n)\) thời gian. Tương tự, dùng tổng theo chiều có thể tính được tổng Dirichlet difference trong cùng thời gian.
Tham khảo thực hiện
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Phương pháp này có thể mở rộng đến dạng bội (dạng mở rộng một), dạng nhân (dạng mở rộng hai), dạng dùng hàm hoàn toàn tích tính thay cho hàm hằng (dạng mở rộng ba), v.v.
Bài toán
Phần này trình bày các bài toán minh họa cách sử dụng Molbius inversion và một số kỹ thuật biến đổi phổ biến. Trước hết, qua một bài toán quen thuộc để làm quen với kỹ thuật xử lý điều kiện \(\gcd\).
Luogu P2522 [HAOI 2011] Problem b
\(T\) bộ dữ liệu. Với mỗi bộ dữ liệu, tính giá trị:
Phạm vi dữ liệu: \(1\le T,x,y,n,m,k\le 5\times 10^4\).
Giải pháp
Theo nguyên lý bao hàm, biểu thức này có thể chia thành \(4\) phần, mỗi phần có dạng
Với dạng này, tiếp theo là một đoạn quy trình tiêu chuẩn: trích xuất thừa số, dùng tính chất của hàm Möbius, đổi thứ tự tổng.
Trước hết, do \(i,j\) chỉ có thể lấy các bội của \(k\), có thể đưa ra một thừa số — tương đương với thay thế \(i=ki'\) và \(j=kj'\), ta được:
Sau đó, dùng tính chất của hàm Möbius:
Thay vào biểu thức, đổi thứ tự tổng, ta được:
Một đoạn thao tác tốt là, cố định \(d\) thì các tổng về \(i\) và \(j\) tách rời, có thể tính riêng. Tiếp theo, vì
nên có
Dùng sàng tuyến tính để tính trước \(\mu(d)\), và tính trước tổng prefix, có thể dùng số học phân khối để giải. Tổng thời gian phức tạp là \(O(N + T\sqrt{N})\) , trong đó \(N\) là giới hạn trên của \(n,m\), \(T\) là số bộ dữ liệu.
Mã nguồn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | |
Tiếp theo, hai bài toán minh họa cách xử lý bằng cách liệt kê các thừa số chung, và dùng sieve để tính giá trị của các hàm tích tính.
SPOJ LCMSUM
\(T\) bộ dữ liệu. Với mỗi bộ dữ liệu, tính giá trị:
Phạm vi dữ liệu: \(1\le T\le 3\times 10^5,~1\le n\le 10^6\).
Giải pháp một
Đề bài cho là số chia hết, nhưng thường thì số chia hết dễ xử lý hơn. Do đó, đầu tiên làm biến đổi:
Lấy \(n\) ra, liệt kê các thừa số chung \(k\):
Với lớp nội, đây là trường hợp phổ biến nhất có chứa điều kiện \(\gcd\). Dùng quy trình tiêu chuẩn, ta có:
Lại một lần nữa, tổng về \(i\) tách rời với các phần khác. Cuối cùng, tổng về \(i\) thực chất là một cấp số cộng: (lấy \(i=di'\))
Như vậy, ta có biểu thức:
Sau khi liệt kê các thừa số chung, dạng này rất phổ biến. Có thể xử lý như sau: đặt tích \(l=kd\) , rồi đổi thứ tự tổng. Vì \(d\mid(n/k)\) tương đương với \(d\mid\ell\mid n\) , nên biểu thức biến thành:
Đặt \(F(\ell)=\sum_{d\mid\ell}\mu(d)d\) , thì biểu thức có dạng:
Vì \(\mu(d)d\) là hàm tích tính, nên nó và hàm hằng \(1\) có tích Dirichlet \(F(n)\) cũng là hàm tích tính. Mặc dù biểu thức này có dạng tích Dirichlet, nhưng \(G(n)\) không phải là hàm tích tính. Tuy nhiên, \(G(n)\) là đa thức, nên nó thực chất là tổng của một số hàm hoàn toàn tích tính. Do đó, có
Hai phần này (không kể hệ số) đều là hàm tích tính, có thể tính trước bằng sàng tuyến tính (hoặc có thể sàng tuyến tính để tính hàm trong lớp, rồi dùng tổng prefix trong \(O(N\log\log N)\) thời gian). Cụ thể, đặt
Để tìm biểu thức, chỉ cần xác định giá trị tại các số nguyên tố lũy thừa. Với số nguyên tố \(p\) và số nguyên dương \(e\),
Đặc biệt, \(H_1(p^e)\equiv 1\) là hàm hằng, còn
Như vậy, dễ dàng dùng sàng tuyến tính để giải. Sau khi sàng tuyến tính ra \(H_2(n)\), có thể dùng biểu thức \(f(n)=(n/2)(H_2(n)+1)\) để tính trong \(O(1)\) thời gian. Tổng thời gian phức tạp là \(O(N+T)\), trong đó \(N\) là giới hạn trên của \(n\), \(T\) là số bộ dữ liệu.
Tham khảo thực hiện có thể dùng tính chất đặc biệt của biểu thức này, để làm rõ hơn. Chỉ cần xác định giá trị tại các số nguyên tố lũy thừa, vẫn có thể hoàn thành sàng tuyến tính trong \(O(N)\) thời gian. Các bước làm rõ hơn được trình bày trong giải pháp hai.
Giải pháp hai
Với bài toán này, có cách xử lý linh hoạt hơn. Từ giải pháp một, ta có
Nếu ở bước này không tiếp tục làm Molbius inversion, mà quan sát tổng về \(i\) là tổng các số nguyên nhỏ hơn hoặc bằng \(d=n/k\) và nguyên tố với \(d\). Với \(d>1\), vì các số nguyên nguyên tố với \(d\) xuất hiện thành cặp, tức là \(i\) và \(d-i\) đều nguyên tố với \(d\), nên có
Với \(d=1\), thì có
Tiếp theo, biểu thức có thể viết thành
Vì \(G(n)=\sum_{d\mid n}d\varphi(d)\) là tích của hàm tích tính \(n\varphi(n)\) và hàm hằng \(1\), nên nó cũng là hàm tích tính, có thể dùng sàng tuyến tính để tính trước. Chỉ cần xác định giá trị tại các số nguyên tố lũy thừa. Với số nguyên tố \(p\) và số nguyên dương \(e\),
Có thể thấy, biểu thức này và giải pháp một là nhất quán. Phương pháp này có tổng thời gian phức tạp vẫn là \(O(N+T)\).
Cuối cùng, dùng biểu thức tích tính của hàm, có thể tối ưu hóa quá trình sàng tuyến tính. Với số nguyên tố \(p\),
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | |
Mã nguồn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | |
BZOJ 2154 [National Team] Crash's Number Table
Tính giá trị:
Phạm vi dữ liệu: \(1\le n,m\le 10^7\).
Giải pháp
Trong quá trình suy luận, bỏ qua modulo. Đặt
Lại là chuyển đổi số chia hết thành số chia hết, liệt kê các thừa số chung, và dùng quy trình tiêu chuẩn, ta được
Lại một lần nữa, tổng về \(i\) và \(j\) tách rời. Trước hết, tính các tổng nội, trích xuất thừa số (tức là lấy \(i=di'\)), ta có
Trong đó, \(G(n)=\dfrac{1}{2}n(n+1)\) là tổng cấp số cộng, đẳng thức cuối cùng dùng tính chất của hàm lấy phần nguyên. Tương tự, đối với tổng về \(j\) có thể tính tương tự. Thay vào biểu thức, ta có
Như trước, với dạng liệt kê thừa số chung, cần liệt kê tích \(l = kd\), đổi thứ tự tổng:
Đặt
Đây là tích của hàm tích tính \(\ell\) và hàm tích tính \(\sum_{d\mid\ell}\mu(d)d\) , nên cũng là hàm tích tính, có thể dùng sàng tuyến tính để tính trước, và tính trước tổng prefix. Sau đó, có thể dùng số học phân khối để tính \(f(n,m)\) trong \(O(\min\{n,m\})\).
Mã nguồn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | |
Tiếp theo, một bài toán đặc biệt, cần chuyển đổi hàm số lượng ước số.
LOJ 2185. [SDOI2015] Số lượng ước số và tổng
\(T\) bộ dữ liệu. Với mỗi bộ dữ liệu, tính giá trị:
Trong đó, \(\sigma_0(n)=\sum_{d \mid n}1\) là số lượng ước số của \(n\).
Phạm vi dữ liệu: \(1\le n,m,T\le 5\times 10^4\).
Giải pháp
Đây là bài toán khó nhất, vì cần chuyển đổi \(\sigma_0(ij)\) thành biểu thức về \(\gcd\). Vì \(\sigma_0\) là hàm tích tính, có thể đầu tiên xét trường hợp số nguyên tố. Với số nguyên tố \(p\) và các số nguyên dương \(e_1,e_2\),
Với trường hợp tổng quát, giả sử \(i=\prod_p i_p\) và \(j=\prod_p j_p\) , trong đó \(i_p,j_p\) là các mũ của \(p\) trong phân tích thừa số nguyên tố của \(i,j\). Tiếp theo, có
Nhận thấy, với mỗi thừa số nguyên tố \(i_p\) của \(i\), liệt kê các ước \(x_p\) của nó, tương đương với liệt kê các ước \(x\) của \(i\) và phân tích thành các thừa số nguyên tố \(x_p\); tương tự với \(j\). Do đó, dùng phân phối, biểu thức này có thể viết thành
Bước cuối cùng dùng đến kết luận: \(x\perp y\) khi và chỉ khi với mỗi thừa số nguyên tố \(p\), đều có \(x_p\perp y_p\).
Được biểu thức này, có thể dùng quy trình tiêu chuẩn:
Bước cuối cùng có nghĩa là: hàm chỉ không lấy giá trị khác \(0\) khi \(d\mid i\) và \(d\mid j\), và khi đó, liệt kê các \(x\) sao cho \(d\mid x\mid i\) tương đương với liệt kê các \(\dfrac{i}{d}\), liệt kê các \(y\) tương tự.
Thay biểu thức này vào biểu thức ban đầu, và đổi thứ tự tổng:
Đặt \(G(n)=\sum_{i=1}^n\sigma_0(i)\), thì
Có thể dùng số học phân khối để giải. Chỉ cần tính trước \(\mu(n)\) và \(\sigma_0(n)\) là được. Tổng thời gian phức tạp là \(O(N+T\sqrt{N})\) , trong đó \(N\) là giới hạn trên của \(n,m\), \(T\) là số bộ dữ liệu.
Mã nguồn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | |
Cuối cùng, một bài toán minh họa cách dùng dạng nhân của Molbius inversion.
Luogu P5221 Product
Tính giá trị:
Phạm vi dữ liệu: \(1\le n\le 1\times 10^6\).
Giải pháp một
Trong quá trình suy luận, bỏ qua modulo. Đặt
Lại là chuyển đổi số chia hết thành số chia hết:
Nhận thấy, các thừa số này là độc lập, có thể tính riêng. Đặt
Thì biểu thức bằng:
Trọng tâm là giải quyết \(g(n)\). Cách xử lý tương tự như trước, nhưng cần chuyển sang dạng nhân. Trước hết, liệt kê và trích xuất thừa số:
Trong đó, \(a\uparrow b=a^b\) là Knuth arrow. Sau đó, thay \([\gcd(i,j)=1]=\sum_d\mu(d)[d\mid i][d\mid j]\) và chuyển tổng về mũ, ta được:
Lại một lần nữa, trích xuất thừa số (tức là lấy \(i=di'\), \(j=dj'\)), và dùng tính chất của hàm lấy phần nguyên, ta được:
Sau đó, tách rời về \(i,j\), ta thấy rằng biểu thức không còn chứa \(i,j\), nên nó tương đương với lấy mũ:
Vì đã liệt kê các thừa số chung, nên cần đổi thứ tự tổng. Đặt \(\ell = kd\), ta có:
Đặt
Dễ thấy đây là dạng tích của Molbius inversion. Dù không biết biểu thức, cũng có thể dùng Dirichlet difference để tính trước. Dù vậy, vì \(\tilde F(n)=n\) rất đơn giản, nên biểu thức của \(F(n)\) có thể tìm được:
von Mangoldt function chính là tự nhiên đối số. Được giá trị \(F(n)\), có thể dùng tích phân khối để tính \(g(n)\) trong \(O(\sqrt{n})\) thời gian. Tổng thời gian phức tạp là \(O(n)\).
Cần lưu ý rằng, khi tính tích, thường dùng Fermat's theorem, nên chỉ số mũ cần lấy modulo với số modulo khác với số đã cho.
Giải pháp hai
Cách xử lý dạng tích khó nhất là đối với tích và mũ, nên có thể lấy log trước. Với bài toán này, chỉ xét \(g(n)\). Lấy log, ta có:
Với dạng này, dùng quy trình tiêu chuẩn, ta có:
Trong đó, \(\Lambda(n)\) là von Mangoldt function. Lấy kết quả này, ta được giải pháp một.
Mã nguồn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | |
Bài tập
- Luogu P3312 [SDOI2014] Số bảng
- Luogu P3700 [CQOI2017] Bảng nhỏ của Q
- Luogu P3704 [SDOI2017] Bảng số
- Luogu P3768 Bài toán đơn giản
- Luogu P4464 [National Team] JZPKIL
- Luogu P4619 [SDOI2018] Bài toán cũ
- Luogu P5518 [MtOI2019] Đoàn quỷ
- Luogu P6222 Bài toán đơn giản
- Luogu P6825「EZEC-4」Tổng
- Luogu P7486「Stoi2031」Rainbow
- AtCoder Grand Contest 038 C - LCMs
- Codeforces 1139 D. Steps to One
Tài liệu tham khảo
- Möbius function - Wikipedia
- Möbius inversion formula - Wikipedia
- Von Mangoldt function - Wikipedia
- algocode 算法博客
Last updated on this page:, Update history
Found an error? Want to help improve? Edit this page on GitHub!
Contributors to this page:hydingsy, hyp1231, ranwen, 383494
All content on this page is provided under the terms of the CC BY-SA 4.0 and SATA license, additional terms may apply