μ 的定义,性质,和几道例题。
定义
μ(d)=⎩⎪⎪⎨⎪⎪⎧1(−1)k0n=1n=∏i=1kpiotherwise
线性求值
1 2 3 4 5 6 7 8 9 10 11 12
| void sieve_mu(int n){ mu[1] = 1; FL(i, 2, n){ if(!vis[i])pri[++len] = i, mu[i] = -1; for(int j = 1;j <= len && pri[j] * i <= n; j++){ vis[pri[j] * i] = 1; if(i % pri[j] == 0)break; mu[pri[j] * i] = -mu[i]; } } FL(i, 1, n)mu[i] = mu[i - 1]; }
|
性质
d∣n∑μ(d)=[n=1][gcd(i,j)=1]=d∣gcd(i,j)∑μ(d)f(n)=d∣n∑g(n)⇒g(n)=d∣n∑f(d)μ(dn)f(n)=n∣d∑g(d)⇒g(n)=n∣d∑f(d)μ(nd)
从这里开始,默认 n≤m。
Ex.1
求∑i=1n∑j=1m[gcd(i,j)=1]
==i=1∑nj=1∑m[gcd(i,j)=1]i=1∑nj=1∑md∣gcd(i,j)∑μ(d)d=1∑nμ(d)⌊dn⌋⌊dm⌋
μ(d) 前缀和优化,后面的整除分块即可。
如果是求 ∑i=1n∑j=1m[gcd(i,j)=k]
这也很简单,我们把式子同时除以 k,得 ∑i=1⌊kn⌋∑j=1⌊km⌋[gcd(i,j)=1]
然后就一样了。
Ex.2
求 ∑i=1n∑j=1mgcd(i,j)∈prime
我们假设 n≤m,然后枚举 k∈prime,得
i=1∑nki=1∑nj=1∑m[gcd(i,j)=k]=k=1∑ni=1∑⌊kn⌋j=1∑⌊km⌋[gcd(i,j)=1]
我们枚举一下 d=gcd,并提到前面。
=k=1∑ni=1∑⌊kn⌋j=1∑⌊km⌋d∣gcd(i,j)∑μ(d)=k=1∑nd=1∑⌊kn⌋μ(d)⌊dkn⌋⌊dkm⌋
由于 n≤107,枚举 k 太慢了,我们还要优化,设 T=dk
=k=1∑nd=1∑⌊kn⌋μ(d)⌊Tn⌋⌊Tm⌋=T=1∑n⌊Tn⌋⌊Tm⌋k∣T∑μ(kT)
后面的预处理,前面一坨整除分块即可。
Ex.3
设 d(x) 为 x 的约数个数,求 ∑i=1n∑j=1md(ij)。
有个结论 d(ij)=∑x∣i∑y∣j[gcd(x,y)=1]
我们一个质数p,i=i′∗pk1,j=j′∗pk2。
考虑 p 对 d(ij) 的贡献,显然在 d 的因子中,p 可以为 0~k1+k2 任意一个。
我们只看 p 这一项,设 x=x′pkx,y=y′pky
要满足 gcd(x,y)=1,那么就有 gcd(pkx,pky)=1
要么kx=0,ky∈[0,k2],共k2+1种
要么ky=0,kx∈[0,k1],共k1+1种
减去重复判断的kx=0,ky=0这种情况,最后答案k1+k2+1种
我们带入原式得:
=i=1∑nj=1∑mx∣i∑y∣j∑[gcd(x,y)=1]=i=1∑nj=1∑mx=1∑ny=1∑md∣gcd(x,y)∑[x∣i][y∣j]μ(d)=x=1∑ny=1∑md∣gcd(x,y)∑μ(d)i=1∑n[x∣i]j=1∑m[y∣j]=x=1∑ny=1∑md∣gcd(x,y)∑μ(d)⌊xn⌋⌊ym⌋=d=1∑nμ(d)x=1∑⌊dn⌋⌊dxn⌋y=1∑⌊dm⌋⌊dym⌋
Ex.4
求 ∑i=1n∑j=1mij[gcd(i,j)=k]。
先同时除以k,但我们还要考虑 i,j 的变化,除 k 后 i,j 会变为原来的 k1,所以最后要乘上 k2。
=i=1∑⌊kn⌋j=1∑⌊km⌋ij[gcd(i,j)=1]k2=i=1∑⌊kn⌋j=1∑⌊km⌋ijd∣gcd(i,j)∑μ(d)k2=k2d=1∑nμ(d)d2i=1∑⌊kdn⌋ij=1∑⌊kdm⌋j
最后那两项为等差数列,计算时整除分块,最终复杂度 O(n)
Ex.5
求 ∑i=1n∑j=1nijgcd(i,j)。
我们知道 ∑d∣nφ(d)=n,所以只要把 μ 换成 φ,然后正常做即可。
i=1∑nj=1∑nijgcd(i,j)=i=1∑nj=1∑nijd∣gcd(i,j)∑φ(d)=d=1∑nφ(d)i=1∑n[d∣i]ij=1∑n[d∣j]j=d=1∑nφ(d)x=1∑⌊dn⌋xdy=1∑⌊dn⌋yd=d=1∑nφ(d)d2x=1∑⌊dn⌋xy=1∑⌊dn⌋y