我太菜了,口嗨的题也嗨不了,赶紧学一发。
记一波笔记,免得忘力。
什么是狄利克雷卷积?
卷积是函数与函数之间的运算。
两个数论函数的狄利克雷卷积是一个新函数。
两个数论函数的狄利克雷卷积一般写成 \(f*g\),读作 \(f\) 卷 \(g\)。
狄利克雷卷积的定义式如下:(不懂建议手动模拟^^)
\[ f*g(n)=\sum\limits_{d|n}f(d)g(\frac{n}{d}) \]
狄利克雷卷积满足交换律,结合律,分配律,柿子懒得打了,自己理解。
积性函数
设 \(f\) 是数论函数,若对任意互质的正整数 \(a,b\),都有 \(f(ab)=f(a)f(b)\),则称 \(f\) 是积性函数。
若对任意的正整数 \(a,b\),都有 \(f(ab)=f(a)f(b)\),则称 \(f\) 是完全积性函数。
我寻思着这玩意不是应该高中whk考试里边都有吗。。。
得先介绍几个函数,作为前置芝士。
完全积性函数
单位函数:\(\epsilon(x) = [x = 1]\)
这个有什么用?这是单位元,任何函数卷单位元都等于它本身(不懂手膜^^)。
恒等函数:\(I(x) = 1\)。
单位函数:\(\mathrm{id}(x) = x\)。
非完全积性函数
重点来力!
\(\mu(x)\) 莫比乌斯函数
定义:
\[ \mu(x) = \begin{cases} 1 & , x = 1 \\ (-1) ^ k & , x = \prod\limits_{i = 1} ^ k p_i \\ 0 & , Otherwise \end{cases} \]
性质:\(\sum\limits_{d|n} \mu(d) = [n = 1]\)
有一个关系:
\[ μ∗1=ϵ \]
它可以用来满足莫比乌斯反演的推理过程,看到后面就知道了。
莫比乌斯反演
现有关系:
\[ F(n)=\sum\limits_{d|n}f(d) \]
即
\[ F=f*1 \]
则有:
\[ f(n)=F*\mu=\sum\limits_{d|n}\mu(\frac{n}{d})f(d)=\sum\limits_{d|n}\mu(d)f(\frac{n}{d}) \]
是不是用到了上面的那个 \(3\) 式?但如何理解上面这个柿子?我一开始脑残了,其实它就是换了一下约数的枚举顺序,所以在这里 \(d\) 和 \(\frac {n}{d}\)
是等效的。
如何筛 $\mu $?方法和线性筛大同小异。
直接给代码,应该比较好懂。
void mobius() {
v[1] = 1;
miu[1] = 1;
for (int i = 2; i < N; i++) {
if(!v[i]) {
v[i] = i;
p[++cnt] = i;
miu[i] = -1;
}
for (int j = 1; j <= cnt; j++) {
if(p[j] * i > N) break;
miu[p[j] * i] = i % p[j] == 0 ? 0 : -miu[i];
v[i * p[j]] = 1;
if(i % p[j] == 0) break;
}
}
}
技巧:
\[ [gcd(i,j)=1]=\sum_{d|gcd(i,j)}\mu(d) \]
证明:
由 \(\mu * 1=\epsilon\),
即 \(\sum_{d|n}\mu(d)=[n=1]\),
将 \(n\) 替换成 \(\gcd(i,j)\) 即可。
又 \(d|\gcd(x,y)\) \(\leftrightarrow\) \(d|x\),\(d|y\),可以枚举倍数来求。
常见反演:
设
\[ f(d)=\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)=d]。 \]
则有:
\[ \begin{align} F(x)&=\sum_{x|d}f(d)\\ &=\sum_{x|d}\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)=d]\\ &=\sum_{x|d}\sum_{i=1}^{n}\sum_{j=1}^{m}[x|i,x|j]\\ &=\lfloor \frac{n}{x} \rfloor \lfloor \frac{m}{x} \rfloor \end{align} \]
于是 \(F\) 是个可以 \(O(1)\) 计算的玩意了。
再反演一下,利用分块就可以做题力^^。
\(\varphi\) 与 \(\mu\) 的关系:
\[ \begin{align} &Id=\varphi *1\\ &Id*\mu =\varphi\\ &\varphi(n)=\sum_{d|n}\mu(d)\frac{n}{d}\\ &\frac{\varphi(n)}{n}=\sum_{d|n}\frac{\mu(d)}{d} \end{align} \]
如果 \(d(n)\) 为 \(n\) 的约数个数,则有关于 \(d(n)\) 的一个挺好用的结论:
\[ d(nm)=\sum_{i|n}\sum_{j|m}[gcd(i,j)==1] \]
证明:
设 \(nm=\prod p_i^{x_i}\),\(n=\prod p_i^{y_i}\),则有 \(m=\prod p_i^{x_i-y_i}\)。
设
\[ i = p_1^{a_1}\cdot p_2^{a_2}\cdot p_3^{a_3}\cdots p_k^{a_k},j = p_1^{b_1}\cdot p_2^{b_2}\cdot p_3^{b_3}\cdots p_k^{b_k} \]
先看第一项。要使 \(\gcd(i,j)==1\),则要么 \(a_1\) 为 \(0\),要么 \(b_1\) 为 \(0\)。若 \(a_1=0\),则 \(b_1\) 有 \(x_1-y_1+1\) 种取值,若 \(b_1=0\),则 \(a_1\) 有 \(y_1+1\) 种取值,\(a_1=b_1=0\) 的情况重复了,所以一共有 \(x_1+1\) 种取值。但其实这对于任意的 \(i\) 也是如此。
所以满足条件的 \(i, j\) 对数为 \(\prod(x_i + 1)\)。这与约数定理给出的形式一致,就得证了。
Orz sengxian 写的是真清楚。
话说写东西怎么这么麻烦啊艹,不写了,累死了。