您的位置:首页 > 其它

反演问题若干

2018-03-30 12:41 260 查看
因为接触到了积性函数的线性筛的问题,之前有过类似问题但是不够系统,所以想把遇到过的所有的反演问题的问题记录一下。

问题1:

求ans=∑aN∑bMgcd(a,b)

这个问题比较经典啦。

设f(d)为gcd(x,y)为d的对数,F(d)为d|gcd(x,y)的对数

所以易知F(n)=∑n|df(d)

反演得:f(n)=∑n|dμ(dn)F(d)

那么:ans=∑ii∑i|dμ(di)F(d)=∑dF(d)∑i|dμ(di)i=∑dF(d)∑i|dμ(i)di

设h(d)=∑i|dμ(i)di

我可以观察一下这个函数的性质是否满足积性函数的性质。设p,q为质数.

那么h(p)=p−1,所以h(q)h(p)=(p−1)(q−1)

因为h(pq)=pq(1−1q−1p+1pq)=(p−1)(q−1)=h(q)h(p),所以是积性函数。

现在我们看h(pk)这个函数的表达式。

因为k只要大于1,μ函数都为0,所以易知h(pk)=pk−pk−1

我发现这个函数表现的性质和欧拉函数是一样的

也就是说ϕ(d)=∑i|dμ(i)di

所以原式为:ans=∑dF(d)ϕ(d)

那么问题已经有答案了,现在回过头来看这个关系,可以说是莫比乌斯函数和欧拉函数之间变换的桥梁:

ϕ(d)=∑i|dμ(i)di=∑i|dμ(di)i

但是我们发现这个就是经过反演后的式子,所以我们应该还可以在还原到没有经过反演过的形式,则有:

n=∑d|nϕ(d)

那么现在会有一个问题,既然答案没有莫比乌斯函数只有欧拉函数,我们能不能直接用如上的关系式来直接化简?

的确是可以的。

所以:ans=∑aN∑bM∑d|gcd(a,b)ϕ(d)=∑aN∑bM∑d|a且d|bϕ(d)=∑dmin(N,M)ϕ(d)NdMd

假如n和m的范围都在105这样,且有多组输入,那么就需要分块来加速,这样就需要处理ϕ(x)的前缀和。

问题2

求ans=∑aN∑bMlcm(a,b)

问题2看似和问题1相差不大,但是推导异常繁杂,下次再这两个问题之间更新一下简化的问题。

首先:ans=∑aN∑bMabgcd(a,b)

这里我们来枚举d=gcd(a,b):

ans=∑dmin(N,M)∑aN∑bM[gcd(a,b)==d?1:0]abd=∑dmin(N,M)d∑a⌊Nd⌋∑b⌊Md⌋[gcd(a,b)==1?1:0]ab

然后这里引入:∑d|nμ(d)=[n==1?1:0].

所以:

ans=∑dmin(N,M)d∑a⌊Nd⌋∑b⌊Md⌋ab∑k|gcd(a,b)μ(k)

发现内嵌的三个和式子和第一个问题有相似之处.同样的套路:

设g(x)=1+2+3+..+x

f(n,m)=∑an∑bmab∑k|gcd(a,b)μ(k)

f(n,m)=∑kmin(n,m)μ(k)k2g(⌊nk⌋)g(⌊mk⌋)

所以ans=∑dmin(N,M)df(⌊Nd⌋,⌊Md⌋)

因为⌊⌊Nd⌋d′⌋=⌊Ndd′⌋

所以整合到原式

ans=∑dmin(N,M)d∑kmin(⌊Nd⌋,⌊Md⌋)μ(k)k2g(⌊Nkd⌋)g(⌊Mkd⌋)

设h(x)=g(⌊Nx⌋)g(⌊Mx⌋)

ans=∑dd∑kμ(k)k2h(kd)

设t=kd

ans=∑th(t)∑k|tμ(k)k2tk=∑th(t)t∑k|tμ(k)k

设l(n)=n∑k|nμ(k)k

易知l(n)是个积性函数,用欧拉筛线性处理即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: