莫比乌斯反演学习笔记


  • 整除分块

Q:Q: 请以 O(N)O(\sqrt{N}) 的时间复杂度求解下式 i=1NNi\sum_{i=1}^N\lfloor\frac{N}{i}\rfloor

A:A: Ni\lfloor\frac{N}{i}\rfloor 这个数列是 呈块状连续分布 的, 设某个块的 左端点ll, 则这个块的 右端点NN/l\frac{N}{N/l} (向下取整略) ,
于是该块的和为 (rl+1)Nl(r-l+1)*\lfloor\frac{N}{l}\rfloor,

代码很简短:

for(reg int l = 1, r; l <= N; l = r+1){
		r = N/(N/l);
   		tmp += (r-l+1)*(N/l);
}

  • 莫比乌斯函数

:定义:

n=p1k1p2k2......pmkmn=p_1^{k_1}*p_2^{k_2}......p_m^{k_m}

μ(n)={1               n=1(1)m      i=1mki=10                else\mu(n)= \begin{cases} 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ n=1 \\ (-1)^m \ \ \ \ \ \ \prod_{i=1}^mk_i=1\\ 0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ else \end{cases}

可以看出有 1单个质因子的幂数超过1 的数字 莫比乌斯函数 值为 00 .


:性质:

1:性质1: 莫比乌斯函数是 积性函数 :

μ(ab)=μ(a)μ(b)       gcd(a,b)=1\mu(a*b)=\mu(a)*\mu(b)\ \ \ \ \ \ \ gcd(a,b)=1

根据这个性质, 可以 O(N)O(N) 进行 线性筛,

  • 若当前数字 ii 为质数, μ(i)=1\mu(i)=-1,

  • i%pj ==0i\%p_j\ == 0, 说明 ipji*p_j 已经含有幂数大于11的质因子, 所以μ(ipj)=0\mu(i*p_j)=0,

  • 否则说明 ii 的质因子与 pjp_j 共同构成 ipji*p_j的质因子,
    于是 μ(ipj)=μ(pj)μ(i)=μ(i)\mu(i*p_j)=\mu(p_j)*\mu(i)=-\mu(i),
    这个式子同时处理了 μ(i)=0\mu(i)=0的情况 .

void sieve(){
        mu[1] = 1, p_cnt = 0;
        for(reg int i = 2; i < maxn; i ++){
                if(!Used[i]) p[++ p_cnt] = i, mu[i] = -1;
                for(reg int j = 1; j <= p_cnt && i*p[j] < maxn; j ++){
                        Used[i*p[j]] = 1;
                        if(i%p[j] == 0){ mu[i*p[j]] = 0; break ; }
                        else mu[i*p[j]] = -mu[i];
                }
        }
}

2:性质2:
dNμ(d)=[N==1]\sum_{d|N}\mu(d)=[N==1]

证明:
  • N=1N=1 时, μ(1)=1\mu(1)=1.

  • N!=1N!=1 时,
    N=p1k1p2k2......pmkmN=p_1^{k_1}*p_2^{k_2}......p_m^{k_m}, d=p1q1p2q2......pmqmd=p_1^{q_1}*p_2^{q_2}......p_m^{q_m},
    由于 质因子幂 大于 11μ\mu 值为 00, 所以只需考虑 幂 为 0,10,1 的质因子项,
    dNμ(d)=i=0m(mi)(1)i\sum_{d|N}\mu(d)=\sum_{i=0}^m \begin{pmatrix}m \\ i\end{pmatrix}*(-1)^i
    因为有 二项式定理, 所以
    =i=0m(mi)(1)i1mi =(11)m =0原式 = \sum_{i=0}^m \begin{pmatrix}m \\ i\end{pmatrix}*(-1)^i*1^{m-i}\\ \ \\ =(1-1)^m\\ \ \\ =0

证毕.

:二项式定理: (x+y)n=k=0n(ni)xnkyn(x+y)^n=\sum_{k=0}^{n}\begin{pmatrix}n \\ i\end{pmatrix}x^{n-k}y^n


  • 莫比乌斯反演

f(n),g(n)f(n),g(n) 为数论函数, 且
f(N)=dNg(d)f(N)=\sum_{d|N}g(d)

莫比乌斯反演 为:
g(d)=dNμ(Nd)f(d)    dNμ(d)f(Nd)g(d)=\sum_{d|N}\mu(\frac{N}{d})f(d)\ \ 或者\ \ \sum_{d|N}\mu(d)f(\frac{N}{d})

证明:

dNμ(d)f(Nd) =dNμ(d)iNdg(i)  =iNg(i)kNiμ(k) =g(N)\sum_{d|N}\mu(d)f(\frac{N}{d})\\ \ \\ = \sum_{d|N}\mu(d)\sum_{i|\frac{N}{d}}g(i) \ \\ \ \\ = \sum_{i|N} g(i) \sum_{k|\frac{N}{i}} \mu(k) \\ \ \\ = g(N)

证毕.

说一下从第二步到怎么到第三步的,
先看第二步推导的含义: 枚举 NN 的约数 dd, 然后再去找与μ(d)\mu(d) 相乘的 g(i)g(i),
分析 ddii 之间的关系, it=Ndi*t = \frac{N}{d} (tt 为正整数), 进而得到 dt=Nid*t=\frac{N}{i}, 即 dNid|\frac{N}{i} ,
于是枚举 ii, 再枚举 Ni\frac{N}{i} 的约数进行计算, 即第三步


  • 莫比乌斯反演的变形

F(x)=d=1Nxg(dx)F(x)=\sum_{d=1}^{\lfloor \frac{N}{x} \rfloor}g(dx)

g(x)=d=1NxF(dx)μ(d)g(x)=\sum_{d=1}^{\lfloor \frac{N}{x} \rfloor}F(dx)\mu(d)

:证明:

d=1NxF(dx)μ(d)=d=1Nxμ(d)i=1Ndxg(idx)\sum_{d=1}^{\lfloor \frac{N}{x} \rfloor}F(dx)\mu(d)\\ = \sum_{d=1}^{\lfloor \frac{N}{x} \rfloor} \mu(d) \sum_{i=1}^{\lfloor\frac{N}{dx}\rfloor} g(i*dx)\\

id=t  (t[1,Nx])i*d=t\ \ (t∈[1,\lfloor\frac{N}{x}\rfloor]), 则 d=t/id = t/i, 即 dtd|t.
即与 F(tx)F(tx) 进行运算的是 μ(t/i)\mu(t/i) .
于是枚举 tt, 得到

=t=1Nxg(tx)dtμ(d)=g(x)原式 = \sum_{t=1}^{\lfloor\frac{N}{x}\rfloor}g(tx)\sum_{d|t}\mu(d)\\ = g(x)
证毕.


  • 莫比乌斯反演的应用

gcd(i,j)=1\color{blue}{求解gcd(i,j)=1的对数}

:解法 :

i=1nj=1m[gcd(i,j)=1]          (n<m)(1)\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=1]\ \ \ \ \ \ \ \ \ \ (n<m) \tag{1}

前面提到莫比乌斯函数的 性质2: iNμ(i)=[N==1]\sum_{i|N}\mu(i)=[N==1]

NN 换成 gcd(i,j)gcd(i,j) 得到 : igcd(i,j)μ(i)=[gcd(i,j)=1]\sum_{i|gcd(i,j)}\mu(i)=[gcd(i,j)=1]

再代入 11 式: i=1nj=1mdgcd(i,j)μ(d)\sum_{i=1}^n\sum_{j=1}^m\sum_{d|gcd(i,j)}\mu(d)

再将 dd 提出来 :

d=1nndmdμ(d)\sum_{d=1}^{n}\lfloor \frac{n}{d} \rfloor \lfloor \frac{m}{d} \rfloor \mu(d)


gcd(i,j)=k\color{blue}{求解gcd(i,j)=k的对数}

1:解法 1:

将上方式子n,mn,m 换为 nk,mk\lfloor \frac{n}{k} \rfloor, \lfloor \frac{m}{k} \rfloor 即可.

2:解法 2:

前面提到莫比乌斯反演的 变形:

F(x)=d=1Nxg(dx)F(x)=\sum_{d=1}^{\frac{N}{x}}g(dx), 则 g(x)=d=1NxF(dx)μ(d)g(x)=\sum_{d=1}^{\frac{N}{x}}F(dx)\mu(d),

于是设 f(k)f(k)gcd(i,j)=kgcd(i,j)=k 的对数, g(k)g(k)kgcd(i,j)k|gcd(i,j) 的对数, 显然有
g(k)=i=1Nkf(ik)=nkmkg(k)=\sum_{i=1}^{\lfloor\frac{N}{k}\rfloor}f(i*k) = \lfloor \frac{n}{k} \rfloor \lfloor \frac{m}{k} \rfloor
于是参照 莫比乌斯反演的变形. 得到
f(k)=x=1Nkg(kx)μ(x)=x=1Nknkxmkxμ(x)f(k) = \sum_{x=1}^{\lfloor\frac{N}{k}\rfloor}g(kx)\mu(x)\\ = \sum_{x=1}^{\lfloor\frac{N}{k}\rfloor}\lfloor \frac{n}{kx} \rfloor \lfloor \frac{m}{kx} \rfloor \mu(x)


:再提整除分块:

nkxmkx\lfloor \frac{n}{kx} \rfloor \lfloor \frac{m}{kx} \rfloor 整除分块时, 要保证块内 nkxmkx\lfloor \frac{n}{kx} \rfloor \lfloor \frac{m}{kx} \rfloor 相同, 每次可能就需要一个指针 “委曲求全”,
具体的说:
一个指针同时处理 n,mn,m 的块, 从起点11出发, 则下一步需要走到 r=min(n/(n/l),m/(m/l))r=min(n/(n/l), m/(m/l)).


gcd(i,j)\color{blue}{求解gcd(i,j)的幂}

i=1Nj=1Mgcd(i,j)k\sum_{i=1}^N\sum_{j=1}^Mgcd(i,j)^k

:解法 :
待填坑…
posted @ 2019-07-13 11:04  XXX_Zbr  阅读(167)  评论(0编辑  收藏  举报