莫比乌斯函数笔记
前言
在学习本节内容前,先行学习整除分块
定义
先让我们看一下莫比乌斯函数的定义:
1)莫比乌斯函数μ(n)的定义域是N;
2)μ(1)=1;
3)当n存在平方因子时,μ(n)=0;
4)当n是素数或奇数个不同素数之积时,μ(n)=-1;
5)当n是偶数个不同素数之积时,μ(n)=1。
性质
\({\ \ \ \ \ \ \ \ \ }\) 1. \({\sum \limits_{d|n} \mu(d)=\{^{1\ \ (n=1)\ ,}_{0\ \ (n>0)\ .} }\)
证明:
(1)如果 \({n=1}\) ,按照定义,原式显然等于1。
(2)如果 \({n>1}\) :
\({\ \ \ \ \ \ \ }\) 那我们就先来将 \({n}\) 分解质因子,
\({\ \ \ \ \ \ \ }\) 即 \({n=p_1^{a_1}\ p_2^{a_2}\ p_3^{a_3}\ p_4^{a_4}…\ p_k^{a_k}}\).
\({\ \ \ \ \ \ \ }\) 当 \({n}\) 能被 \({d}\) 整除时,显而易见,\({d}\) 当然就是 \({n}\) 的因子,也就能表示为 \({n}\) 的质因子的某种组合。
\({\ \ \ \ \ \ \ }\) 那么,对于 \({d}\) ,让我们来分类讨论(优先级从上往下):
\({\ \ \ \ \ \ \ }\) \({\ \ \ \ \ \ \ }\) ① 当 \({d}\) 的某个因子 \({p_m^{a_m}}\) , \({a_m>1}\) 时,显而易见, \({\mu(d)=0}\).
\({\ \ \ \ \ \ \ }\) \({\ \ \ \ \ \ \ }\) ② 当 \({d}\) 的质因子为奇数个,\({\mu(d)=-1}\).
\({\ \ \ \ \ \ \ }\) \({\ \ \ \ \ \ \ }\) ③ 当 \({d}\) 的质因子为偶数个,\({\mu(d)=1}\)
\({\ \ \ \ \ \ \ }\) 好,我们继续往下看。
\({\ \ \ \ \ \ \ }\) 第一种情况贡献为 0 ,我们就直接忽略它。
\({\ \ \ \ \ \ \ }\) 第二种情况的话,只要算出它们的个数,总和也就很容易算出来了吧。
\({\ \ \ \ \ \ \ }\) 那…怎么算呢?
\({\ \ \ \ \ \ \ }\) 好像很简单,也就是从 \({n}\) 的质因子里随意找不重复的奇数个的方案总数就好了吧?
\({\ \ \ \ \ \ \ }\) 那就是 \({C^1_k+C^3_k+C^5_k+…}\) 这样一直到 \({k}\) 。再乘上 \({-1}\) ,也就是减掉这个式子。
\({\ \ \ \ \ \ \ }\) 第三种情况同理,乘上 \({1}\) 后也没变,加上 \({C^0_k+C^2_k+C^4_k+…}\) 一直到 \({k}\) .
\({\ \ \ \ \ \ \ }\) 那结果好像就出来了,\({\sum \limits_{d|n} \mu(d)=C^0_k-C^1_k+C^2_k-C^3_k+…+(-1)^kC^k_k}\) .
\({\ \ \ \ \ \ \ }\) 再根据二项式定理,
\({\ \ \ \ \ \ \ }\) \({\ \ \ \ \ \ \ }\) \({\sum \limits_{d|n} \mu(d)=C^0_k-C^1_k+C^2_k-C^3_k+…+(-1)^kC^k_k=(1+(-1))^k=0^k=0}\)
\({\ \ \ \ \ \ \ }\) 即 \({\sum \limits_{d|n} \mu(d)=0}\) .
所以 \({\sum \limits_{d|n} \mu(d)=\{^{1\ \ (n=1)\ ,}_{0\ \ (n>0)\ .} }\)
线性筛
由于莫比乌斯函数是积性函数,所以可以用线性筛来推。
参考代码:
void init() {
memset(isprime, true, sizeof(isprime));
isprime[1] = false;
tot = 0;
mu[1] = 1;
for (int i = 2; i ≤ n; ++i)
{
if (isprime[i])
{
prime[ ++tot ] = i;
mu[i] = -1;
}
for (int j = 1; j ≤ tot && prime[j] * i ≤ n; ++j)
{
isprime[ prime[j] * i ] = false;
if ( i % prime[j] == 0) break;
mu[ prime[j] * i ] = -mu[i];
}
}
return 0;
}
莫比乌斯反演公式
- \({F(n)= \sum \limits_{d|n} f(d) \ \ \ \leftrightarrow \ \ \ \ f(n)= \sum \limits_{d|n} \mu (n/d)F(d)}\)
代入后易证。
莫反套路
- $[gcd(i,j)=1]= \sum \limits_{d|gcd(i,j)} \mu(d) $
证明?上文性质代入即可。
例1
求 \(\sum \limits_{i=1}^{n} \sum \limits_{j=1}^m [gcd(i,j)=1] \ (n<m)\)
\(=\sum\limits_{i=1}^n \sum\limits_{j=1}^m \sum\limits_{d|gcd(i,j)} \mu(d)\)
\(=\sum\limits_{d=1}^n \mu(d) * \lfloor \frac{n}{d} \rfloor * \lfloor \frac{m}{d} \rfloor\)
再结合整除分块的知识,就可以让其复杂度从 \(O(n^2)\) 到 \(O(\sqrt {n})\).
例2
求 \(\sum\limits_{i=1}^n \sum\limits_{j=1}^m [gcd(i,j)=k] \ \ (n<m)\)
\(=\sum\limits_{i=1}^{\lfloor \frac{n}{k} \rfloor} \sum \limits_{j=1}^{\lfloor\frac{m}{k}\rfloor}[gcd(i,j)=1]\)
剩下与例1同理。
例3
求 \(\sum \limits_{i=1}^{n}\sum \limits_{j=1}^mij[gcd(i,j)=k]\ \ \ (n<m)\)
\(=\sum \limits_{i=1}^{\lfloor \frac{n}{k}\rfloor}\sum \limits_{j=1}^{\lfloor \frac{m}{k} \rfloor} ij \sum \limits_{d|gcd(i,j)}\mu(d)*k^2\)
\(=\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)*d^2 \sum \limits_{i=1}^{\lfloor \frac{n}{kd}\rfloor} \sum \limits_{j=1}^{\lfloor\frac{m}{kd}\rfloor}ij*k^2\)
\(=k^2*\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)*d^2\sum\limits_{i=1}^{\lfloor\frac{n}{kd}\rfloor}i\sum\limits_{j=1}^{\lfloor\frac{m}{kd}\rfloor}j\)
显然,后两个 \(\sum\) 是等差数列。
用公式替换即可。
时间复杂度\(O(n^2)\to O(\sqrt{n})\).
例4
求 \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^mlcm(i,j)\)
其中 \(lcm\) 指最小公倍数:
\(lcm(i,j)=\frac{i*j}{gcd(i,j)}\)
那么原式 \(=\sum \limits_{d=1}^n \sum \limits_{i=1}^n \sum \limits_{j=1}^m \frac{i*j}{d}*[gcd(i,j)=d]\)
\(=\sum \limits_{d=1}^n \sum \limits_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum \limits_{j=1}^{\lfloor \frac{m}{d} \rfloor}i*j*d*[gcd(i,j)=1]\)
\(=\sum \limits_{d=1}^n \sum \limits_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum \limits_{j=1}^{\lfloor \frac{m}{d} \rfloor}i*j*d\sum\limits_{k|gcd(i,j)} \mu(k)\)
\(=\sum \limits_{d=1}^n d\sum \limits_{k=1}^{\lfloor \frac{n}{d}\rfloor}\mu (k)*k^2 \sum \limits_{i=1}^{\lfloor \frac{n}{dk} \rfloor} i \sum \limits_{j=1}^{\lfloor \frac{m}{dk} \rfloor} j\)
设 \(T=dk,f(x)=\sum \limits_{i=1}^x i\)
\(=\sum \limits_{d=1}^n d \sum \limits_{k=1}^{\lfloor \frac{n}{d} \rfloor} \mu(k)*k^2*f(\lfloor \frac{n}{T} \rfloor)*f(\lfloor \frac{m}{T} \rfloor)\)
\(=\sum \limits_{T=1}^{n} f(\lfloor \frac{n}{T} \rfloor) * f(\lfloor \frac{m}{T} \rfloor) \sum \limits_{d|T} d* \mu (d)*T\)
设 \(F(T)= \sum \limits_{d|T}d*\mu(d)*T\)
显然 \(F\) 是一个积性函数,上线性筛
原式再加个整除分块即可
时间复杂度 \(O(n) \to O(\sqrt{n})\)
例5
求
\(\sum \limits_{i=1}^n \sum \limits_{j=1}^m d(i*j)\)
\(=\sum \limits_{i=1}^n \sum \limits_{j=1}^m \sum \limits_{x|i} \sum \limits_{y|j} [gcd(x,y)=1]\)
剩下同上
后话
接下来请同学们自觉做例题以巩固知识。