积性函数大全(欧拉函数、莫比乌斯反演、杜教筛……)
前言
积性函数是OI中的数论题的重要组成部分 (一般都是涉及到各种因数啊,倍数啊,gcd啊
前置知识
整除分块(引理)
有下面这样一个式子:
求这样一个东西需要多久?\(O(n)\)?
仔细观察,我们会发现 \(\left \lfloor {n \over i}\right \rfloor\) 会有相同的取值。
比如:\({18\over 7}={18\over 8}={18\over 9}=2\)
有这样一个结论 \(\left \lfloor {n \over i}\right \rfloor\) 最多有 \(2\sqrt n\) 种取值
所以可以 \(O(\sqrt n)\) 算出答案。
莫比乌斯函数
定义
莫比乌斯函数,像这样 \(\mu(n)\)
例如
一个性质
也就是当n=1是它的值才为1,其他情况都为0 (根据定义应该不难推出吧(逃
欧拉函数
定义
欧拉函数,就像是这样 \(\varphi(n)\)
意思是说在 1 到 n,与 n 互质的数有多少个。
比如 \(\varphi(1)=1\),\(\varphi(7)=6\),\(\varphi(12)=4\)
表达式
\(p_i\)为\(p\)的第\(i\)个质因数,k为质因数个数
其实很简单,就是个容斥
n个数,减去p1的倍数,p2的倍数……再加回p1p2的倍数,减回p1p2p3的倍数……
一个性质
记着就好,就懒得贴证明了 (其实也不难(逃
回归正题——积性函数
什么是积性函数
一个函数\(f(n)\),如果 \(f(nm)=f(n)f(m)\) (n与m互质),那么它就是一个积性函数
另外,如果n、m不互质,上式依然满足,那么它是一个完全积性函数
很显然,上面的莫比乌斯函数和欧拉函数都属于积性函数
其他常见的积性函数
\(e(n)=[n=1]\) (元函数)
\(1(n)=1\)
\(id(n)=n\)
\(d(n)=\sum_{d|n}1\)(因数个数)
\(\sigma(n)=\sum_{d|n}d\) (因数和)
狄利克雷卷积
在这类OI题里,总是会出现 \(\sum_{d|n}f(d)\) 这样的式子,这下,就该狄利克雷卷积出场了
两个积性函数 \(f(n)\) ,\(g(n)\),它们的狄利克雷卷积记为 \(f*g(n)\) 是
或者
运算法则
交换律
把 n/d 换成 d 很容易解决
结合律
常见卷积
仔细观察 \(\sum_{d|n}f(d)=\sum_{d|n}f(d)\times1=\sum_{d|n}f(d)1(\frac{n}{d})=f*1(n)\)
再回到开始的两个性质
所以可得 \(\mu*1(n)=e(n)\),\(\varphi*1(n)=id(n)\)
多试几次还可以得出(省略括号)
同时有
可以看出,在狄利克雷卷积中\(\mu\)相当于加法中的-1,e相当于0,1相当于1
解题
PS:推式子的技巧
枚举因数变为枚举倍数
莫比乌斯反演
就是
(几乎是废话)
当然,重点不是这个,主要是要在式子中构造一个狄利克雷卷积
莫比乌斯反演常用的就是 \(e(n)=\mu*1(n)\)
也就是那个重要性质 \(\sum\limits _{d|n}\mu(d)=[n=1]\)
多说无用,来例题
还记得开始讲的整除分块吗?
\(\lfloor\frac{n}{d}\rfloor\) 只有 \(2\sqrt{n}\) 种取值,通过对每种取值分块,预处理出 \(\mu\) 的前缀和,就能 \(O(\sqrt{n})\) 求出答案
代码实现
\\ n/(n/i)可以算出 n/i 这个值最后出现的位置 (很简单自己想
for(int i=1,pos;i<=min(n,m);i=pos+1){
pos=min(n/(n/i),m/(m/i));
ans+=(mu[pos]-mu[i-1])*(n/i)*(m/i);
}
其他类似的题都基本这样想