反演问题若干
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)是个积性函数,用欧拉筛线性处理即可。
问题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)是个积性函数,用欧拉筛线性处理即可。
相关文章推荐
- 定量遥感反演中的若干数学问题
- ubuntu eclipse tomcat 运行web project 遇到的若干问题及解决方案
- 自动化测试工具QTP:维护对象库、获取对象属性、智能识别、参数化若干问题
- 关于软件技术基础上机报告(段景山 电子科技大学)若干问题漫谈
- 搬砖问题、36个人搬36块砖,男搬4,女搬3,2个小孩招一砖。问男、女、小孩各若干?
- centos6.4下安装alsa声卡的若干问题及解决方案
- ARM 汇编与C调用的若干问题(一般函数调用情况)
- 关于flashplayer安装的若干问题(您安装的flashplayer版本不是最新的版本或者请首先获取flashplayer···)
- 关于ListView的若干问题
- Linux 配置tomcat遇见的若干问题
- C++构造函数以及析构函数的若干面试问题
- 部署eclipse+tomcat+spring mvc遇到的若干问题
- 关于虚拟机使用NAT不能上网的若干问题
- py2exe打包PyQt项目若干问题总结
- sudo的若干问题
- 恢复数据库的过程以及遇到的若干问题
- 从求数组Top N个数开始说起的求数组的若干问题笔记
- 网站发布涉及到的若干问题
- MySQL 查询中遇到的若干问题
- 关于Bat脚本之间变量共享的若干问题