标签:求和 前缀和 class 分解 相关 复杂 乘号 时间 rod
最近学习了莫比乌斯反演,所以来总结一下
\(\mu(x)\)是莫比乌斯反演中常用的函数,ta表示的意思是将\(x\)分解成\(\prod_{i=1}^{k}{p_{i}^{t}}\),如果有至少一项的质数的指数\(t\)不为1,那么\(\mu(x)=0\),否则\(\mu(x)=(-1)^k\)(k表示能分解的质数的个数)
特殊的,\(\mu(1)=1\)
\(\mu\)是积性函数
\(\sum_{i=1}^{n}{\mu[i]}=[n==1]\)
\(\sum_{d|n}{\frac{\mu[d]}{d}}=\frac{\phi(n)}{n}\)
在反演中,经常会遇到\(\sum_{T=1}^{min(n,m)}{f(T)\frac{n}{T}\frac{m}{T}}\)
这时,我们发现很多的\(n/T,m/T\)都是相同的,所以可以通过除法分块\(O(\sqrt{n})\)的做出来
for(int l = 1 , r ; l <= min(n,m) ; l = r + 1) {
r = min(n / (n / l) , m / (m / l)) ;
// 这时当T=l~r时的n/T,m/T是相同的
ans += (sum[r] - sum[l - 1]) * (n / l) * (m / l) ;
}
反演的本质就是用一个可以快速求出的或者比较好求得函数来计算一个与ta相关的不好求的函数
具体的,如果\(F(d)=\sum_{n|d}{f(n)}\)
那么\(f(d)=\sum_{n|d}{\mu(\frac{d}{n})f(n)}\)
当然也还有\(F(d)=\sum_{d|n}{f(n)}\)
那么\(f(d)=\sum_{d|n}{\mu(\frac{n}{d})f(n)}\)
我们经常会遇见这样的式子
\(\sum_{i=1}^{n}\sum_{j=1}^{m}{[gcd(i , j)==d]}\)
这样我们设\(i=id,j=jd\)
式子就会变成这样\(\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]\)
有时候我们会把式子化简成这个样子
\(\sum_{d=1}^{n}F(d)\sum_{d|T}{\mu(\frac{T}{d})\frac{n}{T}\frac{m}{T}}\)
然后可以发现这玩意儿可以化简成这样
\(\sum_{d=1}^{n}F(d)B(\frac{n}{d},\frac{m}{d})\)
这样就可以除法分块,然后里面的\(B()\)也可以除法分块,这样单次询问的时间是\(O(n)\)的
但是我们可以将求和号交换
可以发现\(T=id\)
所以我们就先去枚举\(T\)
\(\sum_{T=1}^{n}\frac{n}{T}\frac{m}{T}\sum_{d|T}{F(d)\mu(\frac{T}{d})}\)
然后我们就可以去筛后面的那部分函数,然后对函数搞一个前缀和,这样又可以除法分块了,单次询问复杂度\(O(\sqrt(n))\)
有的时候我们可能会遇到一些特殊的情况,比如累乘
\(\prod_{d=1}^{n}f(d)^{\sum_{i=1}^{n/d}{\mu(i)\frac{n}{id}\frac{m}{id}}}\)
然后可以对指数整除分块,然后对下面也是整除分块,复杂度\(O(n)\)
然后我们考虑向上面的那种情况一样交换符号,考虑如何把指数弄下来
其实这个东西就相当于这样\(\prod{a}^{1+3+4+5}=\prod_{i=1}^{num}\prod{a^{t[i]}}\)
所以这个也是同理,把求和号弄到前面来变成累乘号得\(\prod_{T=1}^{n}\prod_{d|T}f(d)^{\mu(\frac{T}{d})\frac{n}{T}\frac{m}{T}}\)
然后我们就可以去考虑去筛这个\(\prod_{d|T}{f(d)^{\mu(\frac{T}{d})}}\)函数
当然注意这玩意儿一般不是积性函数,所以可能需要埃筛,还有就是这玩意儿就必须要维护的是前缀积了,并且这所有东西都是在指数上搞得,所以要模的是\(\phi\)
标签:求和 前缀和 class 分解 相关 复杂 乘号 时间 rod
原文地址:https://www.cnblogs.com/beretty/p/10386166.html