​也许更好的阅读体验​


文章目录


作用与使用前提

对一个积性函数 f f f,我们要求 f f f的前 n n n项和 S n S_n Sn,并且要求在比线性复杂度更低的复杂度情况下求出

若有数论函数 g , h g,h g,h,满足

h = f ∗ g h=f*g h=fg

其中 ∗ * 为狄利克雷卷积

并且 h h h的前缀非常好求, g g g的单项非常好求,我们就可以快速的求出 f f f的前缀和


求法

先看 f , g , h f,g,h f,g,h的关系

h ( n ) = ∑ d ∣ n f ( n d ) g ( d ) \begin{aligned}h(n)=\sum_{d|n}f(\frac{n}{d})g(d)\end{aligned} h(n)=dnf(dn)g(d)

我们把对 h h h求前缀和,则有

∑ i = 1 n h ( i ) = ∑ i = 1 n f ∗ g ( i ) = ∑ i = 1 n ∑ d l i f ( n a ) g ( d ) = ∑ d = 1 n g ( d ) ∑ i = 1 n d f ( i ) = ∑ d = 1 n g ( d ) S n d \begin{aligned}\sum ^{n}_{i=1}h\left( i\right) &=\sum ^{n}_{i=1}f\ast g\left( i\right)\\ &=\sum ^{n}_{i=1}\sum _{dli}f\left( \dfrac {n}{a}\right) g\left( d\right) \\ &=\sum ^{n}_{d=1}g\left( d\right) \sum ^{\frac {n}{d}}_{i=1}f\left( i\right) \\ &=\sum ^{n}_{d=1}g\left( d\right) S_{\frac {n}{d}}\\ \\ \end{aligned} i=1nh(i)=i=1nfg(i)=i=1ndlif(an)g(d)=d=1ng(d)i=1dnf(i)=d=1ng(d)Sdn

接下来我们把 d = 1 d=1 d=1的情况单独提出来

∑ i = 1 n h ( i ) = g ( 1 ) S n + ∑ d = 2 n g ( d ) S n d \begin{aligned}\sum ^{n}_{i=1}h\left( i\right) &=g(1)S_n+\sum ^{n}_{d=2}g\left( d\right) S_{\frac {n}{d}}\end{aligned} i=1nh(i)=g(1)Sn+d=2ng(d)Sdn

再把 S n S_n Sn写到左边

S n = ( ∑ i = 1 n h ( i ) ) − ( ∑ i = 2 n g ( i ) S n i ) g ( 1 ) \begin{aligned}S_{n}=\dfrac {\left( \sum ^{n}_{i=1}h\left( i\right) \right) -\left( \sum ^{n}_{i=2}g\left( i\right) S _\frac {n}{i}\right) }{g\left( 1\right) }\end{aligned} Sn=g(1)(i=1nh(i))(i=2ng(i)Sin)

对一般的数论函数 g g g,通常 g ( 1 ) = 1 g(1)=1 g(1)=1,于是我们可以把 g ( 1 ) g(1) g(1)省掉,得到

S n = ( ∑ i = 1 n h ( i ) ) − ( ∑ i = 2 n g ( i ) S n i ) \begin{aligned}S_{n}=\left( \sum ^{n}_{i=1}h\left( i\right) \right) -\left( \sum ^{n}_{i=2}g\left( i\right) S_ \frac {n}{i}\right) \end{aligned} Sn=(i=1nh(i))(i=2ng(i)Sin)

于是我们可以先预处理出来 S 1 , S 2 , ⋯ S m S_1,S_2,\cdots S_m S1,S2,Sm m m m取一个较大的数,如 1 0 6 10^6 106

之后我们可以通过记忆化搜索的方法来求解 S n S_n Sn


举例

μ \mu μ

我们要求 μ \mu μ的前缀和,即 f = μ f=\mu f=μ

我们知道 I = ξ ∗ μ I=\xi*\mu I=ξμ

其中 ξ ( n ) = 1 , I ( n ) = [ n = 1 ] \xi(n)=1,I(n)=[n=1] ξ(n)=1,I(n)=[n=1]

那么

S μ ( n ) = ( ∑ i = 1 n I ( i ) ) − ( ∑ i = 2 n ξ ( i ) S μ ( n i ) ) = 1 − ∑ i = 2 n S μ ( n i ) \begin{aligned}S_{\mu(n)}&=\left( \sum ^{n}_{i=1}I\left( i\right) \right) -\left( \sum ^{n}_{i=2}\xi\left( i\right) S _{\mu(\frac {n}{i})}\right) \\ &=1 - \sum ^{n}_{i=2} S _{\mu(\frac {n}{i})}\\ \end{aligned} Sμ(n)=(i=1nI(i))(i=2nξ(i)Sμ(in))=1i=2nSμ(in)

φ \varphi φ

或者要求 φ \varphi φ的前缀和,即 f = φ f=\varphi f=φ

我们知道 φ \varphi φ的一条性质

n = ∑ d ∣ n φ ( d ) \begin{aligned}n=\sum _{d|n}\varphi \left( d\right)\end{aligned} n=dnφ(d)

然后我们知道一个数论函数 i d id id并且 i d ( n ) = n id(n)=n id(n)=n

于是这条性质我们也可以写成

i d = φ ∗ ξ id=\varphi*\xi id=φξ

我们再套上面的公式,即可得到

S φ ( n ) = ( ∑ i = 1 n i d ( i ) ) − ( ∑ i = 2 n ξ ( i ) S φ ( n i ) ) = n ( 1 + n ) 2 − ∑ i = 2 n S φ ( n i ) \begin{aligned}S_{\varphi(n)}&=\left( \sum ^{n}_{i=1}id\left( i\right) \right) -\left( \sum ^{n}_{i=2}\xi\left( i\right) S _{\varphi(\frac {n}{i})}\right) \\ &=\dfrac{n\left(1+n\right)}{2} - \sum ^{n}_{i=2} S _{\varphi(\frac {n}{i})} \end{aligned} Sφ(n)=(i=1nid(i))(i=2nξ(i)Sφ(in))=2n(1+n)i=2nSφ(in)


如有哪里讲得不是很明白或是有错误,欢迎指正
如您喜欢的话不妨点个赞收藏一下吧