莫比乌斯反演
数论
Prob 1:
给你 n,m,求1≤x≤n,1≤y≤m并且gcd(x,y) is prime的(x,y)的数目
思路一:直接利用常用公式进行变换
∑p is prime∑i=1N∑j=1M[gcd(i,j)=p]
=∑p∑i=1⌊Np⌋∑j=1⌊Mp⌋[gcd(i,j)=1]
=∑p∑i=1⌊Np⌋∑j=1⌊Mp⌋∑d∣gcd(i,j)μ(d)
=∑p∑dμ(d)∑i=1⌊Np⌋[d∣i]∑j=1⌊Mp⌋[d∣j]
=∑p∑dμ(d)⋅⌊Np⋅d⌋⋅⌊Mp⋅d⌋
我们设
T=p⋅d
ans=∑T⌊NT⌋⋅⌊MT⌋⋅∑p∣T ∧ p is primeμ(Tp)
我们设
g(x)=∑p∣x ∧ p is primeμ(xp)
通过观察,我们觉得
g(x)很像狄利克雷卷积。但是,很抱歉,它不是……
所以
g(x)不是积性函数。不能用筛法啦!!!
真的不能用筛法了吗?
其实可以。
我们来推导
g(i⋅p)(p is prime)的性质:
g(i⋅p)=∑d∣i⋅pμ(i⋅pd)=μ(i)+∑d∣i⋅p ∧ d≠pμ(i⋅pd)
∵d,p is prime
∴g(i⋅p)=μ(i)+∑d∣iμ(i⋅pd)
When p∣i, i≡k⋅p, μ(i⋅pd)=μ(k⋅p2d)=0, g(i⋅p)=0
When p∤i,gcd(i,p)=1, μ(i⋅pd)=μ(id)⋅μ(p)=−μ(id),g(i⋅p)=μ(i)−∑d∣iμ(id)=μ(i)−g(i)
于是我们可以筛法“筛”出
g(x)函数了。
剩下的就很简单了,不再赘述。
当然,我们的最终目的其实只是获得∑p∣Tμ(Tp)的前缀和,对吧?
既然如此,我们何不采取更为直接的方法呢?
直接暴力枚举质数,去更新这个质数的倍数的前缀和!
由 limn→∞∑ni=11i=lnn+r这个结论易知每个质数更新时是均摊Θ(logn)的
而质数的个数恰好是Θ(nlogn)的
所以这样暴力维护的效率是均摊Θ(N)的。
思路二:莫比乌斯反演
既然是莫比乌斯反演啦,当然就要构造两个函数了。
f(d)=∑Ni=1∑Mj=1[gcd(i,j)=d]
g(d)=∑Ni=1∑Mj=1[d∣gcd(i,j)]
二者之间的关系:
g(x)=∑d∣xf(d)
根据莫比乌斯反演
f(x)=∑x∣dμ(dx)g(d)
很明显g(x)=⌊Nx⌋⋅⌊Mx⌋
f(x)=∑x∣dμ(dx)⋅⌊Nx⌋⋅⌊Mx⌋
通过换元
f(x)=∑dμ(d)⋅⌊Nx⋅d⌋⋅⌊Mx⋅d⌋
那么ans=∑p,p is primef(p)
剩下的不讲了,和思路一完全一样。不再赘述。
Prob 2:
多次询问,每次给你 a,b,c,d,k,询问∑bi=a∑dj=c[gcd(i,j)=k]
有上下边界怎么办?
先不考虑边界限制!
我们考虑这个问题的简化版:
询问∑Ni=1∑Mj=1[gcd(i,j)=k]
这个很水吧?就是上面的 Prob 1
那么加上边界怎么办?
考虑“容斥原理”
f(a,b,c,d,k)=g(b,d,k)−g(a−1,d,k)−g(c−1,b,k)+g(a−1,c−1,k)
问题解决。
容斥原理、莫比乌斯反演、经典公式变换要能熟练灵活的结合使用。
Prob 3
给你 a,b,c,求gcd(i,j,k)=1的(i,j,k)的数量,其中1≤i≤a,1≤j≤b,1≤k≤c
这个嘛……╮(╯▽╰)╭还是两种推法:
Method 1:
ans=∑i=1a∑j=1b∑k=1c[gcd(i,j,k)=1]
=∑i=1a∑j=1b∑k=1c∑d∣gcd(i,j,k)μ(d)
=∑i=1a∑j=1b∑k=1c∑d∣i ∧ d∣j ∧ d∣kμ(d)
\
=∑dμ(d)∑i=1a[d∣i]∑j=1b[d∣j]∑k=1c[d∣k]
=∑dμ(d)⋅⌊ad⌋⋅⌊bd⌋⋅⌊cd⌋
接下来怎么做?我就呵呵一笑不说话……
Method 2:
莫比乌斯反演,构造:
f(x)=∑ai=1∑bj=1∑ck=1[gcd(i,j,k)=x]
g(x)=∑ai=1∑bj=1∑ck=1[x∣gcd(i,j,k)]=⌊ax⌋⋅⌊bx⌋⋅⌊cx⌋
很明显
g(x)=∑d∣xf(d)
反演
f(x)=∑x∣dμ(dx)g(d)
换元,令
d′≡dx,d=d′⋅x
f(x)=∑d′μ(d′)g(d′⋅x)=∑d′μ(d′)⋅⌊ad′⌋⋅⌊bd′⌋⋅⌊cd′⌋
总结一下,我们会发现,莫比乌斯反演虽然有两种形式:
g(x)=∑d∣xf(d)⇐⇒f(x)=∑d∣xμ(d)⋅g(xd)
g(x)=∑d∣xf(d)⇐⇒f(x)=∑x∣dμ(dx)⋅g(d)
但是,实际应用时,第二种形式更加常用,但是换元很重要,不要换错了!
Prob 4[BZOJ 3529]
令F(i)为i的约数和,q次给定 n,m,a,求
∑i=1n∑j=1m[F(gcd(i,j))<=a]F(gcd(i,j)) mod 231
n,m≤105,q≤2×104,a≤109
a的存在很难受,我们先不考虑a的限制
令g(k)=∑ni=1∑mj=1[gcd(i,j)=k],那么
ans=∑i=1min(n,m)F(i)⋅g(i)
=∑i=1min(n,m)F(i)⋅∑i∣dμ(di)⌊nd⌋⌊md⌋
=∑d⌊nd⌋⌊md⌋∑i∣dF(i)⋅μ(di)
很明显,问题的关键就是
∑i∣dF(i)⋅μ(di)这一堆东西了
还是那两个思路:
Method 1:
很明显,
F(x),μ(x)都是积性函数,
H(x)=∑i∣dF(i)⋅μ(di)是它们的狄利克雷卷积,也是积性函数
所以,我们可以筛法搞定。
Method 2:
还是那句话,傻瓜也有傻瓜的好处,暴力枚举更新
i的倍数,
Θ(N logN)解决。
回到原问题上来:
a的限制怎么办?
我们发现,只有
F(i)≤a的
i才会对答案有贡献
我们离线排序,询问按
a排序,
i按
F(i)排序
每次询问,将符合条件的
i插入树状数组中维护前缀和
至此,问题完美解决。