杜教篩
求積性函數f(x) 的前綴和S(n)=∑ni=1f(i)
狄利克雷卷積:
(g∗f)(x)=∑d|xg(d)f(xd)
∑x=1n(g∗f)(x)=∑x=1n∑d|xg(d)f(xd)
=∑d=1n∑d|xng(d)f(xd)
=∑d=1ng(d)∑x=1n/df(x)
=∑d=1ng(d)S(⌊nd⌋)
即
∑x=1n(g∗f)(x)=∑d=1ng(d)S(⌊nd⌋)
我們有
g(1)S(n)=∑i=1ng(i)S(⌊ni⌋)−∑i=2ng(i)S(⌊ni⌋)
g(1)S(n)=∑i=1n(g∗f)(i)−∑i=2ng(i)S(⌊ni⌋)
假設我們要求S(n)=∑ni=1μ(i)
我們只需要找出g(x) 使得(g∗f)(x) 的前綴和好算就可以了
我們知道
∑d|nμ(d)=[n=1]
那麼我們可以設g(x)=1
這樣的話
(g∗f)(x)=∑d|xf(d)g(dx)=[x=1]
∑i=1x(g∗f)(x)=1
g(1)S(n)=1−∑i=2nS(⌊ni⌋)
後面的部分可以數論分塊
首先先線性篩出前面一部分(1000000 )μ(x) 的前綴和,後面記憶化搜索即可
再假設我們要求S(n)=∑ni=1ϕ(i)
我們知道
∑d|nϕ(d)=n
(g∗f)(x)=∑d|xf(d)g(xd)
我們發現如果令g(x)=1
(g∗f)(x)=∑d|xf(d)=x
g(1)S(n)=∑i=1ni−∑i=2ng(i)S(⌊ni⌋)
S(n)=x(x+1)2−∑i=2nS(⌊ni⌋)
51nod1238 最小公倍數之和V3
求
∑i=1n∑j=1nlcm(i,j)
ans=∑i=1n∑j=1nijgcd(i,j)
=∑d=1n1d∑i=1n∑j=1nij [gcd(i,j)=d]
=∑d=1n1d∑i=1n/d∑j=1n/did jd [gcd(i,j)=1]
=∑d=1nd∑i=1n/d∑j=1n/dij [gcd(i,j)=1]
設
f(x)=∑i=1x∑j=1xij[gcd(i,j)=1]
=2(∑i=1xi∑j=1ij[gcd(i,j)=1])−1
=2(∑i=1xi iϕ(i)+[i=1]2)−1
=(∑i=1xi2 ϕ(i)+[i=1])−1
=∑i=1xi2 ϕ(i)
代回原式子
ans=∑d=1nd∑i=1n/di2 ϕ(i)
設
S(n)=∑i=1ni2 ϕ(i)
S(n)=∑i=1n(g∗f)(i)−∑i=2ng(i)S(ni)
推一下卷積
∑i=1n(g∗f)(x)=∑i=1n∑d|if(d)g(id)
=∑i=1n∑d|id2ϕ(d)g(id)
我們發現設g(x)=x2 就可以把d2 約掉
=∑i=1n∑d|id2ϕ(d)i2d2
=∑i=1ni2∑d|iϕ(d)
=∑i=1ni3
=(n(n+1)2)2
g(1)S(n)=∑i=1n(g∗f)(x)−∑i=2ng(i)S(ni)
S(n)=(n(n+1)2)2−∑i=2ni2S(ni)
我們知道
∑i=1ni2=n(n+1)(2n+1)6
我們可以杜教篩S(n)
ans=∑d=1nd S(nd)