莫比乌斯函数笔记

前言

在学习本节内容前,先行学习整除分块

定义


先让我们看一下莫比乌斯函数的定义:

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]\)

剩下同上


后话

接下来请同学们自觉做例题以巩固知识。

posted @ 2023-06-03 23:02  ForBiggerWorld  阅读(48)  评论(0)    收藏  举报