狄利克雷生成函數與其應用


狄利克雷生成函數是數論中的一項重要工具,與 \(\text{OI}\) 也是一個不可分割的存在,能將一些數論式子推向本質,且能很好地構造篩法。

注:以下討論若無特殊說明 \(p\) 代表一個質數,\(\text{Prime}\) 代表全體質數集。

\(1.\) 狄利克雷生成函數初步

\(\text{Part 1}\) 定義與基本定理

一般的,我們如下定義一個數論函數 \(f\)狄利克雷生成函數,簡稱 \(\text{dgf}\)

\(F(z)=\sum\limits_{n\geq 1}\dfrac{f(n)}{n^z}\) ,通常有 \(f(1)=1\)

與其他生成函數一樣,取系數得到一般項是其主要目的之一,可記作 \(f(n)=[n^{-z}]F(z)\)

而耳熟能詳的狄利克雷卷積,同其他生成函數一樣,是兩個狄利克雷生成函數的積。

若設 \(G(z)=\sum\limits_{n\geq 1}\dfrac{g(n)}{n^z}\)\(f\)\(g\) 的卷積就是 \(F(z)\times G(z)=H(z)\)

同樣設 \(H(z)=\sum\limits_{n\geq 1}\dfrac{h(n)}{n^z}\) ,則有 \(h(n)=\sum\limits_{d|n}f(d)g(n/d)\)\(\cdots\cdots(1.1.1)\)

這是因為 \(F,G\) 中的一項 \(\dfrac{f(n)}{n^z},\dfrac{g(m)}{m^z}\) 之積 \(\dfrac{f(n)g(m)}{(nm)^z}\) 能貢獻到 \(\dfrac{h(nm)}{(nm)^z}\) 中。

還有一個顯而易見的性質:

\(f(n)\)\(\text{dgf}\)\(F(z)\) ,則 \(n^tf(n)\)\(\text{dgf}\)\(F(z-t)\)\(\cdots\cdots(1.1.2)\)

因為 \(\sum\limits_{n\geq 1}\dfrac{n^tf(n)}{n^z}=\sum\limits_{n\geq 1}\dfrac{f(n)}{n^{z-t}}=F(z-t)\)

接下來是狄利克雷生成函數的最本質也最有用的性質:

\(f\) 為積性函數,即 \(\forall ij=n,\gcd(i,j)=1,f(n)=f(i)f(j)\)

\(F(z)=\sum\limits_{n\geq 1}\dfrac{f(n)}{n^z}=\prod\limits_{p\in \text{Prime}}1+\frac{f(p)}{p^z}+\frac{f(p^2)}{p^{2z}}+\frac{f(p^3)}{p^{3z}}+\dots=\prod\limits_{p\in \text{Prime}}\sum\limits_{k\geq 0}\dfrac{f(p^k)}{p^{kz}}\cdots\cdots(1.1.3)\)

證明:

從右往左推,對每個質數每一個的 \(\dfrac{f(p^k)}{p^{kz}}\) 都能與其他一些質數的這種項乘其來得出 \(\dfrac{f(p_1^{\alpha_1})f(p_2^{\alpha_2})\dots f(p_k^{\alpha_k})}{p_1^{\alpha_1z}p_2^{\alpha_2z}\dots p_k^{\alpha_kz}}=\dfrac{f(p_1^{\alpha_1}p_2^{\alpha_2}\dots p_k^{\alpha_k})}{(p_1^{\alpha_1}p_2^{\alpha_2}\dots p_k^{\alpha_k})^z}\) 。由唯一分解定理可得出所有正整數 \(n\)\(\dfrac{f(n)}{n^z}\) 將不重不漏地出現,求和后就是 \(F(z)\)

觀察一下最后一個等號,會發現對每個 \(p\)\(\dfrac{1}{p^z}\) 固定不變,所以有時會設其為 \(x\) ,再對每個 \(p\) 寫成關於 \(x\) 的級數 \(f_p(x)=\sum\limits_{k\geq 0}f(p^k)x^k\) ,稱之為貝爾級數,本質上就是是狄利克雷生成函數的衍生,二者相互依存。

\(\text{Part 2}\) 簡單的運用

\(1.\) \(f(n)=1\)

如果將 \(f(n)=1\) 帶入其狄利克雷生成函數,得到 \(F(z)=\sum\limits_{n\geq 1}\dfrac{1}{n^z}=\zeta(z)\)

這就是黎曼 \(\zeta\) 函數,它將在接下來的運用中發揮重要作用。

由於 \(f(n)=1\) 滿足積性函數的定義,所以可用 \((1.1.3)\) 改寫:

\(F(z)=\sum\limits_{n\geq 1}{\dfrac{1}{n^z}}=\prod\limits_{p\in\text{Prime}}\sum\limits_{k\geq 0}\dfrac{1}{p^{kz}}=\prod\limits_{p\in\text{Prime}}\sum\limits_{k\geq 0}(p^{-z})^k=\prod\limits_{p\in\text{Prime}}\dfrac{1}{1-p^{-z}}\cdots\cdots(1.2.1)\)

\(2.\) \(f(n)=\mu(n)\)

由於 \(\mu(n)\) 為積性函數,所以可以直接用 \((1.1.3)\) 展開。

所以只用看對每個 \(p^k\)\(\mu(p^k)\) 的值。

\(\mu(p^k)=\begin{cases}1,k=0\\-1,k=1\\0,k\geq 2\end{cases}\)

所以 \(F(z)=\prod\limits_{p\in\text{Prime}}\sum\limits_{k\geq 0}\dfrac{\mu(p^k)}{p^{kz}}=\prod\limits_{p\in\text{Prime}}1+\dfrac{-1}{p^z}=\prod\limits_{p\in\text{Prime}}1-p^{-z}=\dfrac{1}{\zeta(z)}\cdots\cdots(1.2.2)\)

如果把右側的 \(\zeta(z)\) 乘到左邊,得到 \(F(z)\zeta(z)=1\)

取兩邊 \(n^{-z}\) 的系數,那 \(F(z)\zeta(z)\) 就是兩個 \(\text{dgf}\) 的卷積,而右邊僅在 \(n=1\) 時值為 \(1\)

所以 \(\sum\limits_{d|n}\mu(d)\times1=\sum\limits_{d|n}\mu(d)=[n=1]\cdots\cdots(1.2.3)\)

有了莫比烏斯函數的 \(\text{dgf}\) ,我們將揭示莫比烏斯反演的本質。

莫反的原式如下 \(g(n)=\sum\limits_{d|n}f(d)\Leftrightarrow f(n)=\sum\limits_{d|n}g(d)\mu(n/d)\cdots\cdots(1.2.4)\)

事實上由於卷積, \(g(n)=\sum\limits_{d|n}f(d)\) 可看做 \(G(z)=F(z)\zeta(z)\) ,兩邊 \(n^{-z}\) 的系數。

那把右邊 \(\zeta(z)\) 除到左邊,得到 \(G(z)\dfrac{1}{\zeta(z)}=F(z)\)

而莫比烏斯函數的 \(\text{dgf}\) 就是 \(\dfrac{1}{\zeta(z)}\) ,所以 \(G(z)\dfrac{1}{\zeta(z)}\) 就是 \(g\)\(\mu\) 的卷積。

再取兩邊 \(n^{-z}\) 的系數就能得到 \(\sum\limits_{d|n}g(d)\mu(n/d)=f(n)\)

其實 \((1.2.3)\) 僅是 \((1.2.4)\) 的一個特例。

\(3.\) \(f(n)=\varphi(n)\)

其中 \(\varphi(n)\)歐拉 \(\varphi\) 函數,代表 \(n\) 以內與 \(n\) 互質的數的個數。

\(\varphi(n)=n\sum\limits_{p|n,p\in \text{Prime}}1-\dfrac{1}{p}\) ,所以 \(\varphi\) 仍是一個積性函數。

為了求其 \(\text{dgf}\) 我們依然想得知 \(\varphi(p^k)\) 的值:

\(\varphi(p^k)=\begin{cases}1,k=0\\\left(1-\frac{1}{p}\right)p^k,k\geq 1\end{cases}\)

所以

\[F(z)=\prod\limits_{p\in\text{Prime}}1+\left(1-\frac{1}{p}\right)\sum\limits_{k\geq 1}\dfrac{p^k}{p^{kz}}=\prod\limits_{p\in\text{Prime}}\frac{1}{p}+\left(1-\frac{1}{p}\right)\sum\limits_{k\geq 0}\left(p^{1-z}\right)^k \]

\[=\prod\limits_{p\in\text{Prime}}\frac{1}{p}+\left(1-\frac{1}{p}\right)\dfrac{1}{1-p^{1-z}}=\prod\limits_{p\in\text{Prime}}\dfrac{1-p^{1-z}+p-1}{p(1-p^{1-z})} \]

\[=\prod\limits_{p\in\text{Prime}}\dfrac{1-p^{-z}}{1-p^{1-z}}=\dfrac{\zeta(z-1)}{\zeta(z)}\cdots\cdots(1.2.5) \]

因為 \(\dfrac{\zeta(z-1)}{\zeta(z)}=\zeta(z-1)\dfrac{1}{\zeta(z)}\) 是兩個 \(\text{dgf}\) 的卷積。

而由 \((1.1.2)\) \(\zeta(z-1)\)\(n\)\(\text{dgf}\)\(\dfrac{1}{\zeta(z)}\)\(\mu(n)\)\(\text{dgf}\)

所以 \([n^{-z}]\dfrac{\zeta(z-1)}{\zeta(z)}=\sum\limits_{d|n}d\mu(n/d)\)

\([n^{-z}]\dfrac{\zeta(z-1)}{\zeta(z)}=[n^{-z}F(z)]=\varphi(n)\)

因而得出 \(\varphi(n)=\sum\limits_{d|n}d\mu(n/d)\cdots\cdots(1.2.6)\)

但在 \(F(z)=\dfrac{\zeta(z-1)}{\zeta(z)}\) 中把 \(\zeta(z)\) 乘到左邊得到 \(F(z)\zeta(z)=\zeta(z-1)\)

卷積后取兩邊系數得出 \(\sum\limits_{d|n}\varphi(d)=n\cdots\cdots(1.2.7)\)

這其實是 \((1.2.6)\) 莫反后能得到的結果。

還有一種玩法,在 \(F(z)=\dfrac{\zeta(z-1)}{\zeta(z)}\) 中將 \(\zeta(z-1)\) 除到左邊得到 \(F(z)\dfrac{1}{\zeta(z-1)}=\dfrac{1}{\zeta(z)}\)

那由 \((1.1.2)\) 得出 \(\dfrac{1}{\zeta(z-1)}\)\(n\mu(n)\)\(\text{dgf}\)

所以 \(\sum\limits_{d|n}d\mu(d)\varphi(n/d)=\mu(n)\cdots\cdots(1.2.8)\)

\(4.\) \(f(n)=\mu(n)^2\)

由於 \(mu(n)\) 是積性函數,所以 \(\mu(n)^2\) 仍是積性函數。

\(\mu(p^k)^2=\begin{cases}1,k=0\\1,k=1\\0,k\geq 2\end{cases}\)

所以 \(F(z)=\prod\limits_{p\in\text{Prime}}1+\dfrac{1}{p^z}=\prod\limits_{p\in\text{Prime}}\dfrac{1-p^{-2z}}{1-p^{-z}}=\dfrac{\zeta(z)}{\zeta(2z)}\cdots\cdots(1.2.9)\)

這似乎並不與之前討論的函數有多少密切的聯系,因為 \(\zeta(2z)\) 並不十分好處理,但將與接下來的幾個函數產生一些有趣的結論。

\(5.\) \(f(n)=\lambda(n)\)

其中 \(\lambda(n)=(-1)^{\Omega(n)}\)\(\Omega(n)\)\(n\) 的質因子個數,相同的算多個。

\(n=p_1^{\alpha_1}p_2^{\alpha_2}\dots p_k^{\alpha_k}\) ,則 \(\Omega(n)=\alpha_1+\alpha_2+\dots+\alpha_k,\lambda(n)=(-1)^{\alpha_1+\alpha_2+\dots+\alpha_k}\)

由於 \(\forall ij=n,\Omega(i)+\Omega(j)=\Omega(n)\) ,所以 \(\lambda(n)\) 是完全積性的。

\(\lambda(p^k)=(-1)^k\)

所以 \(F(z)=\prod\limits_{p\in\text{Prime}}\sum\limits_{k\geq 0}\dfrac{(-1)^k}{p^{kz}}=\prod\limits_{p\in\text{Prime}}\sum\limits_{k\geq 0}\left(-p^{-z}\right)^k=\prod\limits_{p\in\text{Prime}}\dfrac{1}{1+p^{-z}}=\prod\limits_{p\in\text{Prime}}\dfrac{1-p^{-z}}{1-p^{2z}}=\dfrac{\zeta(2z)}{\zeta(z)}\)

\[\cdots\cdots(1.2.10) \]

這竟然與 \(\mu(n)^2\)\(\text{dgf}\) 完全是倒數關系!

所以 \(\sum\limits_{d|n}\lambda(d)\mu(n/d)^2=[n=1]\cdots\cdots(1.2.11)\)

\(6.\) \(f(n)=[n\text{是完全平方數}]\)

這也顯然是完全積性函數,\(f(p^k)=[2|k]\)

所以 \(F(z)=\prod\limits_{p\in\text{Prime}}\sum\limits_{k\geq 0}\dfrac{1}{p^{2kz}}=\prod\limits_{p\in\text{Prime}}\dfrac{1}{1-p^{-2z}}=\zeta(2z)\)

\(\zeta(2z)\) 總算能找出了其每項系數。

\((1.2.9)\) 相乘得到的卷積式是 \(\sum\limits_{d|n}[d\text{是完全平方數}]\mu(n/d)^2=\sum\limits_{d^2|n}\mu\left(\dfrac{n}{d^2}\right)^2=1\cdots\cdots(1.2.12)\)

看起來比較奇怪,幾個非負整數之和僅是 \(1\) ?其實確實如此。

\(n=p_1^{\alpha_1}p_2^{\alpha_2}\dots p_k^{\alpha_k},\beta_i=\left\lfloor\dfrac{\alpha_i}{2}\right\rfloor\)\(d\leq p_1^{\beta_1}p_2^{\beta_2}\dots p_k^{\beta_k}\) 且在取等時 \(\mu\left(\dfrac{n}{d^2}\right)^2=1\)

但是但凡一個質數的指數少了 \(1\)\(\alpha_i-2(\beta_i-1)\geq 2\) ,會出現平方因子,\(\mu\) 值變為 \(0\)

再看看與 \((1.2.10)\) 結合會出現什么:

由於 \(\dfrac{\zeta(2z)}{\zeta(z)}\times \zeta(z)=\zeta(2z)\)

\(n^{-z}\) 的系數得出 \(\sum\limits_{d|n}\lambda(d)=[n\text{是完全平方數}]\cdots\cdots(1.2.13)\)

或者看作 \(\zeta(2z)\times \dfrac{1}{\zeta(z)}=\dfrac{\zeta(2z)}{\zeta(z)}\)

那就得出 \(\sum\limits_{d|n}[d\text{是完全平方數}]\mu(n/d)=\sum\limits_{d^2|n}\mu\left(\dfrac{n}{d^2}\right)=\lambda(n)\cdots\cdots(1.2.14)\)

\(7.\) \(f(n)=\hat\phi(n)\)

這是我亂搞的一個函數,近似於 \(\varphi\) ,定義為 \(\hat\phi(n)=n\sum\limits_{p|n,p\in\text{Prime}}1+\dfrac{1}{p}\)

這顯然還是積性函數,且 \(\hat\phi(p^k)=\begin{cases}1,k=0\\\left(1+\dfrac{1}{p}\right)p^k,k\geq 1\end{cases}\)

所以

\[F(z)=\prod\limits_{p\in\text{Prime}}1+\left(1+\frac{1}{p}\right)\sum\limits_{k\geq 1}\dfrac{p^k}{p^{kz}}=\prod\limits_{p\in\text{Prime}}-\frac{1}{p}+\left(1+\frac{1}{p}\right)\sum\limits_{k\geq 0}\left(p^{1-z}\right)^k \]

\[=\prod\limits_{p\in\text{Prime}}-\dfrac{1}{p}+\left(1+\dfrac{1}{p}\right)\dfrac{1}{1-p^{1-z}}=\prod\limits_{p\in\text{Prime}}\dfrac{-1+p^{1-z}+p+1}{p(1-p^{1-z})} \]

\[=\prod\limits_{p\in\text{Prime}}\dfrac{1+p^{-z}}{1-p^{1-z}}=\prod\limits_{p\in\text{Prime}}\dfrac{1-p^{-2z}}{(1-p^{1-z})(1-p^{-z})}=\dfrac{\zeta(z-1)\zeta(z)}{\zeta(2z)} \]

\[\cdots\cdots(1.2.15) \]

這可以與很多 \(\text{dgf}\) 乘起來有簡潔的形式。

比如與 \(\lambda\)\(\text{dgf}\ \dfrac{\zeta(2z)}{\zeta(z)}\) 相乘得到 \(\zeta(z-1)\)

卷積寫出來就是 \(\sum\limits_{d|n}\hat\phi(d)\lambda(n/d)=n\cdots\cdots(1.2.16)\)

或者與 \([n\text{是完全平方數}]\)\(\text{dgf}\ \zeta(2z)\) 相乘得到 \(\zeta(z-1)\zeta(z)\)

\([n^{-z}]\zeta(z-1)\zeta(z)=\sum\limits_{d|n}d=\sigma_1(n)\)

所以 \(\sum\limits_{d|n}[d\text{是完全平方數}]\hat\phi(n/d)=\sum\limits_{d^2|n}\hat\phi\left(\dfrac{n}{d^2}\right)=\sigma_1(n)\cdots\cdots(1.2.17)\)

其中 \(\sigma_k(n)\) 定義為 \(\sigma_k(n)=\sum\limits_{d|n}d^k\)

\(2.\) 杜教篩

杜教篩是一種比較基本的篩法,配合 \(\text{dgf}\) 較靈活,但時間復雜度上具有一定局限性。

假設要求 \(S(n)=\sum\limits_{k=1}^{n}f(k)\)

其主要思想是構造函數 \(g\)\(h\) 使 \(\sum\limits_{d|k}g(d)f(k/d)=h(k)\) ,即 \(f\)\(g\) 的狄利克雷卷積為 \(h\) ,其中 \(g\)\(h\) 的前綴和需能較快求出。

將卷積式兩邊關於 \(k\) 求和:

\[\sum\limits_{k=1}^{n}h(k)=\sum\limits_{k=1}^{n}\sum\limits_{d|k}g(d)f(k/d) \]

\[=\sum\limits_{d=1}^{n}g(d)\sum\limits_{1\leq k\leq n,d|k}f(k/d)=\sum\limits_{d=1}^{n}g(d)S(\left\lfloor\dfrac{n}{d}\right\rfloor) \]

單獨將 \(d=1\) 的項拎出來,有數論函數下 \(g(1)=1\) ,再將后面的求和放到等號另一邊,就有:

\(S(n)=\sum\limits_{k=1}^{n}h(k)-\sum\limits_{d=2}^{n}g(d)S(\left\lfloor\dfrac{n}{d}\right\rfloor)\cdots\cdots(1.3.1)\)

對於后面的式子可以數論分塊遞歸下去求出。

先是 \(h(k)\) 要方便求前綴和,其次這里的數論分塊中還需求出 \(g(d)\) 的前綴和。

對於每個搜到的 \(S(m)\) 要記錄一下答案以免重復算,以保證時間復雜度。

關於時間復雜度的證明(參考了 \(\text{cmd}\) 的博客 ):

假定能在 \(O(1)\) 的時間內求出 \(g,h\) 的前綴和。

每次求 \(S\) 中傳入的值一定能寫成 \(\left\lfloor\dfrac{n}{k}\right\rfloor\) 的形式。

這是因為假設當前求 \(S\) 傳入的值是 \(m\) ,每次數論分塊時傳下去的就會是 \(\left\lfloor\dfrac{m}{l}\right\rfloor\)

但最初 \(m=n\) 且有 \(\left\lfloor\dfrac{\left\lfloor\dfrac{n}{a}\right\rfloor}{b}\right\rfloor=\left\lfloor\dfrac{n}{ab}\right\rfloor\) 所以求 \(S\) 中傳入的值必然是 \(\left\lfloor\dfrac{n}{k}\right\rfloor\)

由於 \(\left\lfloor\dfrac{n}{k}\right\rfloor\)\(O(\sqrt n)\) 個不同的值,不妨設為 \(\dfrac{n}{i},1\leq i\leq \sqrt n\)

而求 \(S\) 傳入的值是 \(m\) 時就會花費 \(O(\sqrt m)\) 的時間整除分塊處理 \((1.3.2)\) 中第二個求和符號。

那這樣就能得出其時間復雜度為 \(O(\sum\limits_{i=1}^{\sqrt n}\sqrt {\frac{n}{i}})=O(\sqrt n\int_{1}^{\sqrt n}i^{-\frac{1}{2}}di)=O(2\sqrt n\sqrt {\sqrt n})=O(n^{\frac{3}{4}})\)

但如果能線性篩出 \(T\) 之內的 \(S\) ,那只需對 \(n/i\geq T\) 的進行數論分塊,可得出 \(i\leq n/T\)

這樣時間復雜度為:

\(O(T+\sum\limits_{i=1}^{n/T}\sqrt {n/i})=O(T+2\sqrt n\sqrt {n/T})=O(T+n/\sqrt T+n/\sqrt T)\geq O(3\sqrt[3]{n^2})=O(n^{\frac{2}{3}})\)

\(T=n^{\frac{2}{3}}\) 時取等,有最優時間復雜度 \(O(n^{\frac{2}{3}})\)

事實上 \(g,h\) 的前綴和並不一定必須要在 \(O(1)\) 的時間復雜度內求出。

由於對 \(m\) 數論分塊時所需要的前綴和 \(l-1,r\) 都能寫成 \(\left\lfloor\dfrac{m}{w}\right\rfloor\) 的形式。

\(\exists t,m=\left\lfloor\dfrac{n}{t}\right\rfloor\),所以 \(g,h\) 所需的前綴和也僅是 \(\left\lfloor\dfrac{n}{k}\right\rfloor\)

於是能發現 \(g,h\) 所需的前綴和之值與杜教篩能篩出來的完全相同。

也就是說,如果 \(f*g=h\) ,且 \(g,h\) 的前綴和都能在較快的時間內求出 \(\left\lfloor\dfrac{n}{k}\right\rfloor\) 的全部前綴和,那 \(f\) 就能在額外 \(O(n^{\frac{2}{3}})\) 的時間內用杜教篩合並篩出。

但如果能求出 \(f,g\) 的全部 \(\left\lfloor\dfrac{n}{k}\right\rfloor\) 的前綴和,也能求出 \(h\) 的前綴和。

\(\sum\limits_{k=1}^{n}h(k)=\sum\limits_{k=1}^{n}\sum\limits_{d|k}f(d)g(n/d)=\sum\limits_{d=1}^{n}f(d)\sum\limits_{k=1}^{\left\lfloor \frac{n}{d}\right\rfloor}g(k)\cdots\cdots(1.3.2)\)

這也能數論分塊求出,需要的也僅是 \(f,g\)\(\left\lfloor\dfrac{n}{k}\right\rfloor\) 處的前綴和。

\(\text{cmd}\) 的話總結,就是在 \(f*g=h\) 時能“知二篩一”。

先來一些簡單的例子:

\(1.\) \(\mu(n)\)

由於 \(\mu(n)\)\(\text{dgf}\)\(\dfrac{1}{\zeta(z)}\)

\(\sum\limits_{d|n}\mu(d)=[n=1]\)\(g(n)=1,h(n)=[n=1]\) ,這就是 \((1.2.3)\)

所以 \(g,h\) 都能在 \(O(1)\) 的時間內求出,再杜教篩一下就能得出 \(\mu(n)\) 的前綴和。

\(2.\) \(\varphi(n)\)

由於 \(\varphi(n)\)\(\text{dgf}\)\(\dfrac{\zeta(z-1)}{\zeta(z)}\)

\(\sum\limits_{d|n}\varphi(n)=n\)\(g(n)=1,h(n)=n\),這式子就是 \((1.2.7)\)

因此 \(g,h\) 的前綴和還是能 \(O(1)\) 求出,再杜教篩出 \(\varphi(n)\) 的前綴和。

這兩題就是杜教篩模板

\(3.\) \(n\varphi(n)\)

\((1.1.2)\) 與上個例子知 \(n\varphi(n)\)\(\text{dgf}\)\(\dfrac{\zeta(z-2)}{\zeta(z-1)}\)

所以 \(\sum\limits_{d|n}d\varphi(d)\left(\dfrac{n}{d}\right)=n^2\)\(g(n)=n,h(n)=n^2\)

仍能 \(O(1)\) 求出其前綴和。

但這個例子有一個很好的啟示。

假設已有方法求出 \(f(n)\) 的前綴和,即構造出了 \(\sum\limits_{d|n}f(d)g(n/d)=h(n),F(z)G(z)=H(z)\)

\(n^tf(n)\) 的前綴和仍然能類似求出。

因為 \(n^tf(n)\)\(\text{dgf}\)\(F(z-t)\) ,而上式能推出 \(F(z-t)G(z-t)=H(z-t)\)

那只需構造 \(g(n)\leftarrow n^tg(n),h(n)\leftarrow n^th(n)\) 即可。

\(4.\) \(\lambda(n)\)

\((1.2.13)\)\(\sum\limits_{d|n}\lambda(d)=[n\text{是完全平方數}]\)

所以有 \(g(n)=1 ,h(n)=[n\text{是完全平方數}]\)

那在杜教篩時為了得知 \(\left\lfloor\dfrac{n}{k}\right\rfloor\)\(h\) 的前綴和,可以將全部 \(\left\lfloor\sqrt n\right\rfloor\) 個平方數找出來,對每個 \(\left\lfloor\dfrac{n}{k}\right\rfloor\)\(h\) 前綴和一次 \(\operatorname{lowerbound}\) 求出,就要花費 \(O(\sqrt n\log n)\) 的時間,記得要把查過的記錄下來,不然復雜度會退化。

那再配合杜教篩就能以 \(O(n^{\frac{2}{3}}+\sqrt n\log n)\) 的時間求出 \(\lambda\) 的前綴和。

事實上在回過頭去看 \((1.2.14)\) 的式子 \(\sum\limits_{d^2|n}\mu\left(\dfrac{n}{d^2}\right)=\lambda(n)\)

所以 \(\sum\limits_{k=1}^{n}\lambda(k)=\sum\limits_{k=1}^{n}\sum\limits_{d^2|k}\mu\left(\dfrac{n}{d^2}\right)=\sum\limits_{d=1}^{\sqrt n}\sum\limits_{d^2|k,1\leq k\leq n}\mu\left(\dfrac{n}{d^2}\right)=\sum\limits_{d=1}^{\sqrt n}\sum\limits_{k=1}^{\left\lfloor\frac{n}{d^2}\right\rfloor}\mu(k)\)

這所需要的 \(\mu(n)\) 的前綴和也屬於 \(\left\lfloor\dfrac{n}{k}\right\rfloor\) ,那直接暴力統計 \(d\) 即可。

總時間復雜度為 \(O(n^{\frac{2}{3}}+\sqrt n)\)

這其實也能反觀 \(\text{dgf}\) 的強大。

\(5.\) $\mu(n)^2 $

按着之前的式子 \((1.2.11):\) \(\sum\limits_{d|n}\lambda(d)\mu(n/d)^2=[n=1]\)

既然上文能 \(O(n^{\frac{2}{3}})\) 求出 \(\lambda(n)\)\(\left\lfloor\dfrac{n}{k}\right\rfloor\) 處的前綴和。

所以能在額外 \(O(n^{\frac{2}{3}})\) 的時間內求出 \(\mu(n)^2\) 的前綴和。

但還有更優秀的時間復雜度:

既然 \(\mu(n)^2\)\(\text{dgf}\)\(\dfrac{\zeta(z)}{\zeta(2z)}=\zeta(z)\times \dfrac{1}{\zeta(2z)}\)

\(\dfrac{1}{\zeta(2z)}=\prod\limits_{p\in \text{Prime}}1-\dfrac{1}{p^{2z}}\)

這可以看做一個 \(f(p^k)\begin{cases}1,k=0\\-1,k=2\\0,\text{otherwise}\end{cases}\) ,的積性函數函數 \(f\)\(\text{dgf}\)

所以 \(\mu ^2\) 就是 \(f\)\(g(n)=1\) 的卷積,能用 \((1.3.2)\) 求出。

既然每個質數只在出現平方次時 \(f\) 有值,那這些 \(p\) 必定 \(\leq \sqrt n\)

所以有值的 \(f\) 必定是一些互不相同的質數之積的完全平方。

那僅需要找出 \(m=p_1p_2\dots p_k\leq \sqrt n\) 的全部 \(m\) ,滿足 \(f(m^2)=(-1)^k=\mu(m)\)

\(m\) 的數的個數是比 \(\sqrt n\) 略小一點。

所以時間復雜度因該比 \(O(\sqrt n)\) 略小一點。

這可以輕松過掉 \(\text{P4318}\)

事實上這種方法也是基於后文將要講述的 \(\text{PN}\) 篩的一個特例。

\(6.\) \(\hat\phi (n)\)

\(\hat\phi(n)\)\(\text{dfg}\)\(\dfrac{\zeta(z)\zeta(z-1)}{\zeta(2z)}\) ,可以有很多方法求出。

由於 \(\dfrac{\zeta(z)\zeta(z-1)}{\zeta(2z)}\times\dfrac{\zeta(2z)}{\zeta(z)}=\zeta(z-1)\)

所以 \(\sum\limits_{d|n}\hat\phi(n)\lambda(n/d)=n,g(n)=\lambda(n),h(n)=n\)

其中 \(\lambda(n)\) 可按之前所述的方法 \(O(n^{\frac{2}{3}})\) 求出需要的值,那按 \((1.3.1)\) 做就完了。

\(\dfrac{\zeta(z)\zeta(z-1)}{\zeta(2z)}\times\zeta(2z)=\zeta(z)\zeta(z-1)\)

所以 \(\sum\limits_{d|n}\hat\phi(d)[n/d\text{是完全平方數}]=\sigma_1(n)\) ,就是 \((1.2.17)\)

若取 \(g(n)=[n\text{是完全平方數}],h(n)=\sigma_1(n)\)\(g(n)\) 的篩法之前已講述,只需看 \(\sigma_1(m)\) 的前綴和:

\(\sum\limits_{k=1}^{m}\sigma_1(k)=\sum\limits_{k=1}^m\sum\limits_{d|k}d=\sum\limits_{d=1}^{m}d\sum\limits_{d|k,1\leq k\leq m}1=\sum\limits_{d=1}^{m}d\left\lfloor\dfrac{n}{d}\right\rfloor\)

於是單次求 \(m\) 內的 \(\sigma_1(k)\) 的前綴和就能以 \(O(\sqrt m)\) 的時間。

而需要的 \(m\) 共有 \(O(\sqrt n)\)\(\left\lfloor\dfrac{n}{k}\right\rfloor\) ,總復雜度是 \(O(\sum\limits_{i=1}^{\sqrt n}\sqrt{n/i})=O(n^{\frac{3}{4}})\) ,這與上文杜教篩類似。

於是仍要篩出 \(n^{\frac{2}{3}}\) 的所有 \(\sigma_1(k)\) ,才有 \(O(n^{\frac{2}{3}})\) 的時間復雜度。

還有一種方法: \(\dfrac{\zeta(z)\zeta(z-1)}{\zeta(2z)}=\dfrac{\zeta(z)}{\zeta(2z)}\times \zeta(z-1)\)

於是能取 \(f(n)=\mu(n)^2,g(n)=n\) ,就能按 \((3.1.2)\) 篩出。

\(\mu(n)^2\) 的前綴和按上文兩種方法都有 \(O(n^{\frac{2}{3}})\) 的方法求出需要的 \(\left\lfloor\dfrac{n}{k}\right\rfloor\) 處 的前綴和。(第二種方法的處理方式可參考上面 \(\sigma_1\) 的求和)。

所以,在 \(\text{dgf}\) 的幫助下輕而易舉地得到了 \(3\) 種處理 \(\hat\phi\) 的前綴和的方法。

一些例題

\(\text{P3768}\)

題意:求 \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ij\gcd (i,j),n\leq 1.1\times 10^9\)

直接莫反推式子:

\[\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ij\gcd (i,j)=\sum\limits_{d=1}^{n}\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ij[d=\gcd (i,j)] \]

\[=\sum\limits_{d=1}^{n}\sum\limits_{d|i,1\leq i \leq n}\sum\limits_{d|j,1\leq j\leq n}ij[\gcd(i,j)=d]=\sum\limits_{d=1}^{n}d^2\sum\limits_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\frac{n}{d}\right\rfloor}ij[\gcd(i,j)=1] \]

\[=\sum\limits_{d=1}^{n}d^2\sum\limits_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\frac{n}{d}\right\rfloor}ij\sum\limits_{k|i,k|j}\mu(k)=\sum\limits_{d=1}^{n}d^2\sum\limits_{k=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\mu(k)\sum\limits_{k|i,1\leq i\leq\left\lfloor\frac{n}{d}\right\rfloor}\sum\limits_{k|j,,1\leq j \leq \left\lfloor\frac{n}{d}\right\rfloor}ij \]

\[=\sum\limits_{d=1}^{n}d^2\sum\limits_{k=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\mu(k)k^2\sum\limits_{i=1}^{\left\lfloor\frac{n}{kd}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\frac{n}{kd}\right\rfloor}ij=\sum\limits_{T=1}^{n}\left(T^2\sum\limits_{k|T}\mu(k)\right)\sum\limits_{i=1}^{\left\lfloor\frac{n}{T}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\frac{n}{T}\right\rfloor}i,j \]

\(S(m)=\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}ij=\dfrac{m^2(m+1)^2}{4},f(T)=T^2\sum\limits_{k|T}\mu(k)\)

那原式就是 \(\sum\limits_{T=1}^{n}f(T)g(\left\lfloor\dfrac{n}{T}\right\rfloor)\) 可以直接數論分塊算,但其中要 \(f(T)\) 的前綴和。

而數論分塊的邊界是 \(\left\lfloor\dfrac{n}{w}\right\rfloor\) 可以直接杜教篩出 \(f(T)\)

由上面 \(1.\)\(3.\) 中的啟示,直接構造 \(g(n)=n^2,h(n)=1\) 再杜教篩就沒了。

\(\text{P7504}\)

題意: 給出 \(n,q\)\(\sum\limits_{x=1}^{n}[x\bot q]\sum\limits_{i=1}^{x}[i\bot x]i,n,k\leq 10^9\) (原題就是求兩次這個)

\(r(k)=\sum\limits_{i=1}^{k}[i\bot k]i\) ,則原式只需要求 \([k\bot q]r(k)\) 的前綴和。

對其莫反:

\[r(k)=\sum\limits_{i=1}^{k}i\sum\limits_{d|i,d|k}\mu(d)=\sum\limits_{d|k}\mu(d)d\sum\limits_{i=1}^{n/d}i=\dfrac{1}{2}\sum\limits_{d|k}\mu(d)d\left(\dfrac{k^2}{d^2}+\dfrac{k}{d}\right) \]

\[=\dfrac{1}{2}\left(k\sum\limits_{d|k}\mu(d)\dfrac{k}{d}+k\sum\limits_{d|k}\mu(d)\right)=\frac{1}{2}k[k=1]+\frac{1}{2}k\varphi(k)=\frac{1}{2}[k=1]+\frac{1}{2}k\varphi(k) \]

所以原式就是 \(\sum\limits_{k=1}^{n}[k\bot q]r(k)=\dfrac{1}{2}\left(1+\sum\limits_{k=1}^{n}[k\bot q]k\varphi(k)\right)\)

那接下來就希望快速計算 \([k\bot q]k\varphi(k)\) 的前綴和。

由於 \([k\bot q]\Rightarrow\forall i|k,[i\bot q] \text{且} [(k/i)\bot q]\)

所以若 \(h(n)=\sum\limits_{d|n}f(d)g(n/d)\) ,那就有 \([n\bot q]h(n)=\sum\limits_{d|n}[d\bot q]f(d)[(n/d)\bot q]g(n/d)\)

那么在此例中有 \(g(n)=n,h(n)=n^2\)\(3.\) 中所述。

為了杜教篩,接下來的問題就是 \([k\bot q]k\) 的前綴和與 \([k\bot q]k^2\) 的前綴和。

再將其莫反:

\[\sum\limits_{d=1}^{m}[d\bot q]d^c=\sum\limits_{d=1}^{m}d^c\sum\limits_{k|d,k|q}\mu(k)=\sum\limits_{k|q}\mu(k)\sum\limits_{k|d,1\leq d\leq m}d^c=\sum\limits_{k|q}\mu(k)k^c\sum\limits_{d=1}^{\left\lfloor\frac{m}{d}\right\rfloor}d^c \]

由於 \(q\) 的因子個數是 \(O(\log q)\) 的,這個式子可以在搜到時直接 \(O(\log(p))\) 算。

由於需要的在提前 \(O(n^{\frac{2}{3}})\) 的線性篩后需要這么算的僅有 \(O(n^{\frac{1}{3}})\)

所以這部分的總時間復雜度為 \(O(n^{\frac{1}{3}}\log n)\)

加上求 \(p\) 的所有因數以及杜教篩后總體時間復雜度為 \(O(\sqrt q+n^{\frac{1}{3}}\log n+n^{\frac{2}{3}})\)

\(\text{U183339}\)

題意:
\(r(t)=\sum\limits_{k=1}^t k\left[\gcd(k,t)=1\right]\)
\(\sum\limits_{i=1}^n \sum\limits_{j=1}^n (i^2+j^2+ij)r(\gcd(i,j))\bmod 998244353,n\leq 10^{10}\)

這也是道我亂搞的題,卻無意間發現 \(r(n)=\dfrac{1}{2}\left([n=1]+n\varphi(n)\right)\) 竟然在上題中出現了。

那再莫反看看最終的那個式子要干啥:

\[\sum\limits_{i=1}^n \sum\limits_{j=1}^n (i^2+j^2+ij)r(\gcd(i,j))=\sum\limits_{d=1}^{n}\sum\limits_{i=1}^{n},\sum\limits_{j=1}^{n}(i^2+j^2+ij)r(d)[\gcd(i,j)=d] \]

\[\sum\limits_{d=1}^{n}r(d)\sum\limits_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\frac{n}{d}\right\rfloor}(i^2d^2+j^2d^2+idjd)[\gcd(i,j)=1]=\sum\limits_{d=1}^{n}d^2r(d)\sum\limits_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\frac{n}{d}\right\rfloor}(i^2+j^2+ij)\sum\limits_{k|i,k|j}\mu(k) \]

\[\sum\limits_{d=1}^{n}r(d)d^2\sum\limits_{k=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\mu(k)k^2\sum\limits_{i=1}^{\left\lfloor\frac{n}{kd}\right\rfloor}\sum\limits_{i=1}^{\left\lfloor\frac{n}{kd}\right\rfloor}(i^2+j^2+ij)=\sum\limits_{T=1}^{n}\left(T^2\sum\limits_{d|T}r(d)\mu(T/d)\right)\sum\limits_{i=1}^{\left\lfloor\frac{n}{T}\right\rfloor}\sum\limits_{i=1}^{\left\lfloor\frac{n}{T}\right\rfloor}(i^2+j^2+ij) \]

這又能數論分塊,先看看小括號后面的式子:

\(\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}i^2+j^2+ij=2\sum\limits_{i=1}^{m}i^2+\left(\sum\limits_{i=1}^{m}i\right)^2=\dfrac{m(m+1)(11m^2+7m)}{12}\)

而前面的為了求前綴和又需要杜教篩了。

由於 \(T^2\sum\limits_{d|T}r(d)\mu(T/d)=\dfrac{1}{2}\left(T^2\mu(T)+T^2\sum\limits_{d|n}d\varphi(d)\mu(T/d)\right)\)

其中 \(T^2\mu(T)\) 的前綴和按上文某啟發已很好求出,剩下的就是 \(T^2\sum\limits_{d|n}d\varphi(d)\mu(T/d)\) 的前綴和。

這玩意又是個卷積,除 \(T^2\) 外的 \(\text{dgf}\)\(\dfrac{\zeta(z-2)}{\zeta(z-1)}\times\dfrac{1}{\zeta(z)}=\dfrac{\zeta(z-2)}{\zeta(z-1)\zeta(z)}\)

所以 \(T^2\sum\limits_{d|T}r(d)\mu(T/d)\)\(\text{dgf}\) 就是 \(\dfrac{\zeta(z-4)}{\zeta(z-3)\zeta(z-2)}\)

所以可以構造 \(g(n)=[n^{-z}]\zeta(z-3)\zeta(z-2),h(n)=[n^{-z}]\zeta(z-4)=n^4\)

其中 \(h(n)=n^4\) 的前綴和很好求,是 \(\sum\limits_{i=1}^{m}i^4=\dfrac{x(x+1)(2x+1)(3x^2+3x-1)}{30}\)

\(g(n)=\sum\limits_{d|n}d^3\left(\dfrac{n}{d}\right)^2=n^2\sum\limits_{d|n}d\)

所以 \(\sum\limits_{i=1}^{m}g(i)=\sum\limits_{i=1}^{m}i^2\sum\limits_{d|i}d=\sum\limits_{d=1}^{m}d^2\sum\limits_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}i\) ,可以數論分塊 \(\sqrt m\) 求出。

與之前所述一樣,需預處理出前 \(n^{\frac{2}{3}}\) 的前綴和,剩下的數論分塊算,才能保證時間復雜度。

總時間復雜度為 \(O(n^{\frac{2}{3}})\)

當然處理 \(T^2\sum\limits_{d|n}d\varphi(d)\mu(T/d)\) 的前綴和可以先求出 \(d^3\varphi(d)\)\(d^2\mu(d)\) 的前綴和,再用 \((1.3.1)\) 算。

但這樣單是這里就要做 \(3\) 次杜教篩,上面的方法只用兩次。

\(3.\text{Powerful Number}\)

這本質上杜教篩的一個優化,在一些杜教篩難以單獨解決時能很好化解。

假設要求 \(\sum\limits_{i=1}^{n}f(i)\) ,其基本原理就是構造 \(f=h\times g\) ,則有:

\(\sum\limits_{k=1}^{n}f(k)=\sum\limits_{k=1}^{n}\sum\limits_{d|k}h(d)g(n/d)=\sum\limits_{d=1}^{n}h(d)\sum\limits_{k=1}^{\left\lfloor \frac{n}{d}\right\rfloor}g(k)\) 也就是 \((1.3.2)\)

但如果 \(f\) 能滿足 \(h(p)=0\) ,就能有一個很妙的事情。

那就是若 \(n=p_1^{\alpha_1}p_2^{\alpha_2}\dots p_k^{\alpha_k}\)\(h(n)\) 僅在 \(\mathop{\forall}\limits_{1\leq i\leq k}\alpha_i\geq 2\) 時有值。

這些 \(n\) 被稱為 \(\text{Powerful Number}\) ,簡稱 \(\text{PN}\) ,它 \(\leq N\) 的個數僅有 \(O(\sqrt N)\)

這是因為所有 \(\text{PN}\) 都能寫成 \(a^2b^3\) 的形式。

這只需將出現奇數次的質數 \(p_i^{\alpha_i},2|\alpha_i\)\(p_i^3\) 並到 \(b\) 中,那剩余的就是平方數並到 \(a\) 中即可。

\(\text{PN}\) 的個數就是:

\[\displaystyle O\left(\int_{1}^{\sqrt n}\sqrt[3]{\dfrac{n}{a^2}}\mathrm{d}a\right)=O\left(\sqrt[3] n\displaystyle \int_{1}^{\sqrt n}a^{-\frac{2}{3}}\mathrm{d}a\right)=O\left(\sqrt[3]n\ 3a^{\frac{1}{3}}\Big|_{1}^{\sqrt n}\right)=O\left(\sqrt[3] n\sqrt[6] n\right)=O(\sqrt n) \]

那再看一下 \(g(p)\) 的值:\(f(p)=h(1)g(p)+h(p)g(1)=g(p)\)

所以現實中一般是構造 \(g(p)=f(p)\) ,然后根據 \(f=g\times h\) 就能反推出 \(h\)

\(f(p^k)=\sum\limits_{i=0}^{k}g(p^{i})h(p^{k-i})\Rightarrow h(p^k)=f(p^k)-\sum\limits_{i=1}^{k}g(p^i)h(p^{k-i})\)

那對每個 \(\leq \sqrt n\) 質數暴力枚舉次數,再按上式處理就能得出 \(h(p^k)\) 的全部值。

\(k\leq \log n,\pi(n)=O\left(\dfrac{n}{\log n}\right)\) ,所以時間復雜度為 \(O\left(\dfrac{\sqrt n}{\log n}\times \log^2 n\right)=O(\sqrt n\log n)\),為了存下 \(h(p^k)\) 的空間復雜度就是 \(O(\sqrt n)\)

當然能求出 \(h(p^k)\) 的封閉形式,而不要遞推,時間復雜度將是 \(O(\sqrt n)\)

那暴力搜出所有 \(\text{PN}\) ,再按 \(\sum\limits_{k=1}^{n}f(k)=\sum\limits_{d=1}^{n}h(d)\sum\limits_{k=1}^{\left\lfloor \frac{n}{d}\right\rfloor}g(k)\) 求出來。

接下來要求的就是 \(g\) 的前綴和,在能杜教篩的時候,由於 \(\left\lfloor\dfrac{n}{d}\right\rfloor\) 一定是能在杜教篩中被處理出來,所以可以在這里再配合杜教篩求出,時間復雜度將是 \(n^{\frac{2}{3}}\)

\(g\) 的前綴和能 \(O(1)\) 求出,時間就可以縮短為 \(O(\sqrt n)\)\(O(\sqrt n\log n)\) ,取決於 \(h(p^k)\) 是否需要遞推。

\(\text{P5325}\)

題意:給定積性函數 \(f(p^k)=p^k(p^k-1)\) ,求 \(\sum\limits_{k=1}^{n}f(k),n\leq 10^{10}\)

由於 \(f(p)=p(p-1)\) 考慮構造 \(g(n)=n\varphi(n)\)

那由 \(h(p^k)=f(p^k)-\sum\limits_{i=1}^{k}g(p^i)h(p^{k-i})\) 就能推出 \(h\) 剩下的就是求 \(g(n)=n\varphi(n)\) 的前綴和,這是易得的。

於是就能 \(O(n^{\frac{2}{3}})\) 解決。

loj #6053. 簡單的函數

題意:給定積性函數 \(f(p^k)=p \operatorname{xor} k\) ,求 \(\sum\limits_{k=1}^{n}f(k),n\leq 10^{10}\)

由於當 \(p\neq 2\)\(f(p)=p-1=\varphi(p)\) ,而當 \(p=2\)\(f(p)=3(p-1)=3\varphi(p)\)

由於 \(f\) 是積性函數,那就可以構造 \(g(n)=\begin{cases}3\varphi(n),2|n\\\varphi(n),\text{otherwise}\end{cases}\)

\(h\) 仍容易以 \(h(p^k)=f(p^k)-\sum\limits_{i=1}^{k}g(p^i)h(p^{k-i})\) 遞推。

剩下要求的就是 \(g\) 的前綴和。

\(g(n)=\varphi(n)+[2|n]2\varphi(n)\),記 \(S(n)=\sum\limits_{k=1}^{n}\varphi(k),S1(n)=\sum\limits_{k=1}^{n}[2|k]\varphi(k)\)

\(\sum\limits_{k=1}^{n}g(k)=S(n)+S1(n)\)

其中 \(S(n)\) 是杜教篩容易求的,關鍵是 \(S1(n)\)

\[S1(n)=\sum\limits_{k=1}^{n}[2|k]\varphi(k)=\sum\limits_{k=1}^{\left\lfloor\frac{n}{2}\right\rfloor}\varphi(2k)=\sum\limits_{k=1}^{\left\lfloor\frac{n}{2}\right\rfloor}\dfrac{\varphi(2)\varphi(k)\gcd(2,k)}{\varphi(\gcd(2,k))} \]

\[=\sum\limits_{k=1}^{\left\lfloor\frac{n}{2}\right\rfloor}\dfrac{\varphi(k)\gcd(2,k)}{\varphi(\gcd(2,k))}=\sum\limits_{k=1}^{\left\lfloor\frac{n}{2}\right\rfloor}[2|k]\dfrac{\varphi(k)2}{\varphi(2)}+\sum\limits_{k=1}^{\left\lfloor\frac{n}{2}\right\rfloor}[2\nmid n]\dfrac{\varphi(k)1}{\varphi(1)} \]

\[=2S1(\left\lfloor\frac{n}{2}\right\rfloor)+S(\left\lfloor\frac{n}{2}\right\rfloor)-S1(\left\lfloor\frac{n}{2}\right\rfloor)=S(\left\lfloor\frac{n}{2}\right\rfloor)+S1(\left\lfloor\frac{n}{2}\right\rfloor) \]

其中用到了 \(\varphi(ij)=\dfrac{\varphi(i)\varphi(j)\gcd(i,j)}{\varphi(\gcd(i,j))}\) ,這能以 \(\varphi\) 的式子輕松證明出來。

所以對每個 \(S1(m)\) 就能 \(O(\log n)\) 求出。

這是因為需要的 \(m=\left\lfloor\dfrac{n}{k}\right\rfloor\) ,遞推下去每次需要的 \(\left\lfloor\dfrac{m}{2}\right\rfloor=\left\lfloor\dfrac{\left\lfloor\dfrac{n}{k}\right\rfloor}{2}\right\rfloor=\left\lfloor\dfrac{n}{2k}\right\rfloor\) 是杜教篩 \(S\) 時必然會處理的。

而按照預處理前 \(n^{\frac{2}{3}}\)\(S1\) 后要算 \(O(n^{\frac{1}{3}})\)\(S1(m)\) ,時間為 \(O(n^{\frac{1}{3}}\log n)\)

加上 \(\text{PN}\) 篩及杜教篩的時間復雜度,總時間為 \(O(\sqrt n\log n+\sqrt[3] n\log n+n^{\frac{2}{3}})\)

loj #6682. 夢中的數論

題意:求 \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\sum\limits_{k=1}^{n}[j|i][(j+k)|i],n\leq 10^{10}\)

\(f(i)=\sum\limits_{j=1}^{i}\sum\limits_{k=1}^{i}[j|i][(j+k)|i]\) ,則原式為 \(f(i)\) 的前綴和。

\([j|i][(j+k)|i]\) 相當於從 \(i\) 的因數中選出兩個的方案數,為 \(\dbinom{\sigma_0(i)}{2}\)

所以 \(f(i)=\dbinom{\sigma_0(i)}{2}=\dfrac{\sigma_o(i)^2-\sigma_0(i)}{2}\)

其中 \(\sigma_0(i)\) 的前綴和是易得的:\(\sum\limits_{i=1}^{n}\sum\limits_{d|i}=\sum\limits_{d=1}^{n}\left\lfloor\dfrac{n}{d}\right\rfloor\) 一次數論分塊即可。

重點看 \(\sigma_0(i)^2\) 的前綴和,這個積性函數不得不重推 \(\text{dgf}\) 來探究。

為了下文表述方便,設 \(f_p(x)=\sum\limits_{k\geq 0}\sigma(p^k)^2x^k\) ,即設對每個質數 \(p\)\(x=p^{-z}\) 轉為貝爾級數的形式。

\(\sigma_0(i)^2\)\(\text{dgf}\) 就是 \(\prod\limits_{p\in \text{Prime}}f_p(p^{-z})\)

由於 \(\sigma_0(p^k)^2=(k+1)^2\)

所以 \(f_p(x)=\sum\limits_{k\geq 0}(k+1)^2x^k=\sum\limits_{k\geq 0}k^2x^k+\sum\limits_{k\geq 0}kx^k+\dfrac{1}{1-x}\)

由於 \(\sum\limits_{k\geq 0}a_kx^k=F(x)\Rightarrow\sum\limits_{k\geq 0}t(k)a_kx^k=t(x\mathrm{D})F(x)\) ,其中 \(x\mathrm D\) 代表對原式求導后乘 \(x\) 的算子,\(t\) 是一個多項式。

這用第二類 \(\text{Stirling Numbers}\)\(t(k)\) 每一項轉為下降冪,再用具體數學的習題 \((6.13)\) 容易證明。

所以

\[f_p(x)=(x\mathrm{D})^2\dfrac{1}{1-x}+2(x\mathrm D)\dfrac{1}{1-x}+\dfrac{1}{1-x} \]

\[=(x\mathrm{D})\dfrac{x}{(1-x)^2}+\dfrac{2x}{(1-x)^2}+\dfrac{1}{1-x} \]

\[=x\dfrac{(x^2-2x+1)-(2x-2)x}{(1-x)^4}+\dfrac{2x}{(1-x)^2}+\dfrac{1}{1-x} \]

\[=x\dfrac{1-x+2x}{(1-x)^3}+\dfrac{2x}{(1-x)^2}+\dfrac{1}{1-x} \]

\[=\dfrac{x+x^2+2x-2x^2+x^2-2x+1}{(1-x)^3}=\dfrac{1+x}{(1-x)^3} \]

這式子十分簡潔,於是 \(\sigma_0(i)^2\)\(\text{dgf}\) 就是:

\[\prod\limits_{p\in \text{Prime}}\dfrac{1+p^{-z}}{(1-p^{-z})^3}=\prod\limits_{p\in \text{Prime}}\dfrac{1-p^{-2z}}{(1-p^{-z})^4}=\dfrac{\zeta(z)^4}{\zeta(2z)} \]

這可以看做 \(\zeta(z)^4\times \dfrac{1}{\zeta(2z)}\) ,而 \(\zeta(2z)=\prod\limits_{p\in \text{Prime}}1-p^{-2z}\) 僅在分解后各個質數次冪為 \(2\) 的數中有值。

所以 \(\dfrac{1}{\zeta(2z)}\) 僅在 \(\text{PN}\) 中的一部分中有值,個數小於 \(\sqrt n\) ,能直接搜出來。

剩下的就是求 \(\zeta(z)^4\) 的前綴和,可以杜教篩。

這相當於 \(\zeta(z)^2\) 與自身的卷積,而為了求出 \(\zeta(z)^2\) 需要 \(\zeta(z)\) 與自身的卷積。

\(\zeta(z)^2\)\(\zeta(z)\) 需要的僅是 \(\left\lfloor\dfrac{n}{k}\right\rfloor\) 處的 \(O(\sqrt n)\) 個值,在預處理出前 \(n^{\frac{2}{3}}\) 的前綴和后用杜教篩的時間復雜度是 \(O(n^{\frac{2}{3}})\)

由於我比較懶,在處理前 \(n^{\frac{2}{3}}\)\(\zeta(z)^2,\zeta(z)^4\) 的前綴和時直接用了 \(\text{P5495}\) 的方法多一個 \(\ln\ln n\) 算。

那這樣預處理的范圍可以適當調整一下。

總時間復雜度是 \(O(n^{\frac{2}{3}}\ln\ln n)\)\(O(n^{\frac{2}{3}})\) ,取決於是否線性篩。

但即使是 \(O(n^{\frac{2}{3}}\ln\ln n)\) 的方法在 \(\text{loj}\) 上也能跑的十分快,不可思議地快過了一部分 \(\text{Min25}\) 篩。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM