加载中...

莫比乌斯函数、莫比乌斯反演

莫比乌斯函数

有两种求法求解 \(mu[n]\)

  • 质因数分解:\(O(\sqrt n)\) 求出单个 \(mu[n]\)
  • 线性筛:\(O(n)\) 求出整个前缀 \(mu[1\backsim n]\)

线性筛求莫比乌斯函数

pmKneO0.png

const int N = 50005;

bool st[N];
int primes[N], tot;
int mu[N];
void sieve(int n){ // 线性筛质数过程中求出mu[1~n]
    mu[1] = 1;
    for(int i = 2; i <= n; i ++){
        if(!st[i]){
            primes[++tot] = i;
            mu[i] = -1;
        }
        for(int j = 1; j <= tot && primes[j] * i <= n; j ++){
            st[i * primes[j]] = true;
            if(i % primes[j] == 0){
                mu[i * primes[j]] = 0;
                break;
            }
            else{
                mu[i * primes[j]] = -mu[i];
            }
        }
    }
}

P3455

Q:\(T\) 组询问,每组询问给定 \(n,m,k\),求:

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

\(T,n,m,k \le 5 \times 10^{4}\)

pmKkXz6.png

右下角和式可利用多维数论分块在 \(O(\sqrt n)\) 内快速求出,总复杂度 \(O(T \sqrt n)\)

code

P2257

Q:\(T\) 组询问,每组询问给定 \(n,m\),求:

\[\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i, j) 是质数] \]

\(T \le 10^{4}\)\(n,m \le 10^{7}\)

pmKAkWt.png

pmKZYOf.png

code

P3327

Q:\(T\) 组询问,每组询问给定 \(n,m\),求:

\[\sum_{i=1}^{n}\sum_{j=1}^{m} d(ij) \]

\(d(x):\) \(x\) 的约数个数
\(T,n,m \le 5 \times 10^{4}\)

首先需要一个关键结论:

\[d(ij) = \sum_{x|i}\sum_{y|j}[\gcd(x,y)=1] \]

证明:即证可以用 \((\)\(i\) 的约数,\(j\) 的约数\()\) 构成的所有互质对\(ij\) 的所有约数 形成一一映射。

  • 对于 \(ij\) 的任意约数 \(d\),将其质因子分解,并规定从 \(ij\) 中拿取质因子的唯一方式:优先从 \(i\) 里拿,不够了再从 \(j\) 拿;
  • 考虑某种质因子 \(p\)
    • 若只从 \(i\) 中取 \(p\),则不管;
    • \(i\) 中的 \(p\) 全部取完,且又从 \(j\) 中取出了部分 \(p\),则直接将从 \(i\) 中取出的 \(p\) 全部去除
  • 这样, 对于 \(\forall p_{k}\)\(\forall c \in [0, \alpha_{k}]\) 均可被唯一表示出来,且 \(i, j\) 中无公共的 \(p_{k}\),二者是互质的。
  • 考虑所有可能性,不难发现待证显然成立。

pmKy41J.png

pmKZYOf.png

这里的数论分块多了一层:需要先对内部数论分块求前缀和,得到 \(F\);然后再对 \(F(\lfloor \frac{n}{d} \rfloor)\)\(F(\lfloor \frac{m}{d}\rfloor)\) 求二维数论分块。

code

莫比乌斯反演

P1829

Q:给定 \(n,m\),求:

\[\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i, j) \]

单测,\(n, m \le 10^{7}\)

pmKWCY6.png

pmKZYOf.png

注意本题的数论分块有两层,需要分块套分块,总复杂度 \(O(\sqrt n * \sqrt n) = O(n)\)

code

P3704

Q:多测,给定 \(n,m\),求:

\[\prod_{i=1}^{n}\prod_{j=1}^{m}Fib(\gcd(i, j)) \]

\(T \le 10^{3}\)\(n, m \le 10^{6}\)

pmKHm7D.png

pmKZYOf.png

观察最终形式,由表及里地分析;

  • 括号外是一层数论分块,只不过取整函数跑到了幂次上,由于幂次运算也具有分配律,故数论分块仍然适用。
  • 括号内是区间积的形式。注意这是关于 \(T\) 的函数,预处理前缀积时需要关于 \(T\) 作处理。计算括号内的式子看似需要枚举 \(d, T\) 两层循环,但要注意 \(T = kd\),也就是只有 \(T\)\(d\) 的倍数时式子才有意义。故在计算时存在调和级数枚举的优化(枚举 \(d \in [1, n]\),对于每个 \(d\) 枚举其所有倍数)。

code

posted @ 2026-06-11 21:03  小橘奏  阅读(5)  评论(0)    收藏  举报