我太菜了,口嗨的题也嗨不了,赶紧学一发。
记一波笔记,免得忘力。
什么是狄利克雷卷积?
卷积是函数与函数之间的运算。
两个数论函数的狄利克雷卷积是一个新函数。
两个数论函数的狄利克雷卷积一般写成 (f*g),读作 (f) 卷 (g)。
狄利克雷卷积的定义式如下:(不懂建议手动模拟^^)
狄利克雷卷积满足交换律,结合律,分配律,柿子懒得打了,自己理解。
积性函数
设 (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)) 莫比乌斯函数
定义:
性质:(sumlimits_{d|n} mu(d) = [n = 1])
有一个关系:
它可以用来满足莫比乌斯反演的推理过程,看到后面就知道了。
莫比乌斯反演
现有关系:
即
则有:
是不是用到了上面的那个 (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;
}
}
}
技巧:
证明:
由 (mu * 1=epsilon),
即 (sum_{d|n}mu(d)=[n=1]),
将 (n) 替换成 (gcd(i,j)) 即可。
又 (d|gcd(x,y)) (leftrightarrow) (d|x),(d|y),可以枚举倍数来求。
常见反演:
设
则有:
于是 (F) 是个可以 (O(1)) 计算的玩意了。
再反演一下,利用分块就可以做题力^^。
(varphi) 与 (mu) 的关系:
如果 (d(n)) 为 (n) 的约数个数,则有关于 (d(n)) 的一个挺好用的结论:
证明:
设 (nm=prod p_i^{x_i}),(n=prod p_i^{y_i}),则有 (m=prod p_i^{x_i-y_i})。
设
先看第一项。要使 (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 写的是真清楚。
话说写东西怎么这么麻烦啊艹,不写了,累死了。