莫比乌斯函数、莫比乌斯反演
莫比乌斯函数
有两种求法求解 \(mu[n]\):
- 质因数分解:\(O(\sqrt n)\) 求出单个 \(mu[n]\);
- 线性筛:\(O(n)\) 求出整个前缀 \(mu[1\backsim n]\)
线性筛求莫比乌斯函数
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}\)
右下角和式可利用多维数论分块在 \(O(\sqrt n)\) 内快速求出,总复杂度 \(O(T \sqrt n)\)。
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}\)
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}\),二者是互质的。
- 考虑所有可能性,不难发现待证显然成立。
这里的数论分块多了一层:需要先对内部数论分块求前缀和,得到 \(F\);然后再对 \(F(\lfloor \frac{n}{d} \rfloor)\) 与 \(F(\lfloor \frac{m}{d}\rfloor)\) 求二维数论分块。
莫比乌斯反演
P1829
Q:给定 \(n,m\),求:
\[\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i, j)
\]
单测,\(n, m \le 10^{7}\)
注意本题的数论分块有两层,需要分块套分块,总复杂度 \(O(\sqrt n * \sqrt n) = O(n)\)
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}\)
观察最终形式,由表及里地分析;
- 括号外是一层数论分块,只不过取整函数跑到了幂次上,由于幂次运算也具有分配律,故数论分块仍然适用。
- 括号内是区间积的形式。注意这是关于 \(T\) 的函数,预处理前缀积时需要关于 \(T\) 作处理。计算括号内的式子看似需要枚举 \(d, T\) 两层循环,但要注意 \(T = kd\),也就是只有 \(T\) 是 \(d\) 的倍数时式子才有意义。故在计算时存在调和级数枚举的优化(枚举 \(d \in [1, n]\),对于每个 \(d\) 枚举其所有倍数)。







浙公网安备 33010602011771号