1. 程式人生 > 其它 >題解[zt的數論題]

題解[zt的數論題]

原題連結

前言:希望大家在做數論題時不應僅僅侷限於套路,更應清楚本質。

題意:

\(f(t)=\sum\limits_{k=1}^t k[\gcd(k,t)=1]\)

\(\sum\limits_{i=1}^n \sum\limits_{j=1}^n (i^2+j^2+ij)f(\gcd(i,j))\)

首先明顯的,要求的式子可以莫比烏斯反演,得到

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

此部分不再贅述。

如果能線性預處理出括號內外的式子,則此題便可數論分塊做完。

先看相對簡單的後半部分:

\(R(m)=\sum\limits_{i=1}^m \sum\limits_{j=1}^m (i^2+j^2+ij)\) 也即括號後面的式子。


\(R(m)=2\sum\limits_{i=1}^m i^2+\left(\sum\limits_{i=1}^m i\right)^2=\frac{m(m+1)(2m+1)}{3}+\frac{m^2(m+1)^2}{4}=\frac{m(m+1)(11m^2+7m)}{12}\)

這部分送分的就做完了。

\(g(T)=\sum\limits_{d|T}^{}f(d)\mu(T/d)\)

最終數論分塊時只需成上 \(T^2\) 再做字首和。

這部分雖然是個狄利克雷卷積形式,但遺憾的是 \(f(d)\) 並非積性函式,沒法直接線性篩。

先對 \(f(d)\) 進行一次莫比烏斯反演:

\(f(d)=\sum\limits_{k=1}^d k\sum\limits_{i|k,i|d}\mu(i)=\sum\limits_{i|d}^{}\mu(i)\sum\limits_{i|k,1\leq k\leq d}k=\sum\limits_{i|d}\mu(i)i \sum\limits_{k=1}^{d/i}k\)

\(S(m)=\sum\limits_{i=1}^m i\)

因此 \(f(d)=\sum\limits_{i|d}^{}i\mu(i)S(\frac{d}{i})\)

這還是個狄利克雷卷積,但 \(S(m)=\frac{m(m+1)}{2}\) 還不是個積性函式。

到了這步不得不使用大招了:狄利克雷生成函式。

對此不十分了解的可先參考這篇文章,或具體數學 \(\text{Chapter 7}\) 最後一節(雖然沒講多少但值得挖掘)

先是 \(S(m)\)\(\text{dgf}\) :

\(\varrho(z)=\sum\limits_{n\geq 1}^{}\dfrac{S(n)}{n^z}=\dfrac{1}{2} \left(\sum\limits_{n\geq 1}^{}\dfrac{n^2}{n^z}+\sum\limits_{n\geq 1}^{}\dfrac{n}{n^z}\right)=\dfrac{1}{2}\zeta(z-2)+\frac{1}{2}\zeta(z-1)\)

還有 \(i\mu(i)\)\(\text{dgf}\)

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

所以 \(f(d)\)\(\text{dgf}\) 就是:

\(\digamma(z)=\varrho(z)\ast \psi(z)=\dfrac{1}{2}+\dfrac{1} {2}\dfrac{\zeta(z-2)}{\zeta(z-1)}\)

然而 \(\varphi(d)\)\(\text{dgf}\) 是:

\(\phi(z)=\dfrac{\zeta(z-1)}{\zeta(z)}\)

所以 \(\digamma(z)=\dfrac{1}{2}+\dfrac{1}{2}\phi(z-1)\)

因此 \(f(d)=\dfrac{1}{2}\left[d=1\right]+\dfrac{1}{2}d\varphi(d)\)

這的確出人意料的簡潔!

於是我們滿懷信心地帶到最開始的 \(g(T)\) 中:

\(g(T)=\sum\limits_{d|T}^{}f(d)\mu(T/d)=\dfrac{1}{2}\left(\mu(T)+\sum\limits_{d|T}d\varphi(d)\mu(\frac{T}{d})\right)\)

再記 \(h(T)=\sum\limits_{d|T}d\varphi(d)\mu(\frac{T}{d})\) 這總算是個積性函式,能線性篩出來了!

對每一個質數 \(p\) ,\(k\geq 2\)

\(\begin{cases}h(1)=1\\h(p)=p\varphi(p)\mu(1)+1\varphi(1)\mu(p)=p^2-p-1\\h(p^2)=p^2(p^2-p)+p(p-1)\cdot(-1)+1\cdot1\cdot0=p^4-p^3-p^2+p\\h(p^k)=p^k(p^k-p^{k-1})-p^{k-1}(p^{k-1}-p^{k-2})=p^{2k}-p^{2k-1}-p^{2k-2}+p^{2k-3}\end{cases}\)

最後一行後面的因為莫比烏斯函式而沒了。

所以線性篩到某個數有多個 \(p\) 時特判一下 \(p^2\)

其他的由於 \(h(p^{k+1})=p^2 h(p^k)\) 直接乘 \(p^2\) 就行了。

但這題還有點卡常……

有一個很重要的優化:線性篩 \(h(T)\) 時可以開著 \(\text{long long}\)不取模。

這是因為其 \(\text{dgf}\)\(\dfrac{\zeta(z-2)}{\zeta(z-1)\zeta(z)}\)

\(\varphi(n^2)\)\(\text{dgf}\) 是:

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

由於 \(\mu(i)\)\(\text{dgf}\)\(\dfrac{1}{\zeta(z)}\) ,且 \(\mu(i)\leq 1\)

所以 \(h(T)\leq \varphi(T^2)< t^2\) ,不會爆 \(\text{long long}\)

程式碼就不放了。