一、积性函数
数论函数是指一个正整数到整数的映射。
积性函数:对于所有 互质 的整数 (a,b),有性质 (f(ab)=f(a)f(b)) 的数论函数。常见的积性函数有:
- 约数个数函数 (d(n)=sum_{dmid n} 1)
- 约数和函数 (sigma (n)=sum_{dmid n} d)
- 约数 (k) 次幂函数 (sigma_k (n)=sum_{dmid n} d^k)
- 欧拉函数 (varphi (n)=sum_{i=1}^n [gcd(i,n)=1])
- 莫比乌斯函数 (mu (n)=egin{cases}1&{n=1}\(-1)^k&c_{1,2,...,k}=1 (n=prod_{i=1}^k p_i^{c_i})\0&c_i>1end{cases})
完全积性函数:对于所有整数 (a,b),有性质 (f(ab)=f(a)f(b)) 的数论函数。
如常数函数 (1),幂函数 ( ext{Id}_k(n)=n^k)(特别地,( ext{Id}_1(n)) 通常记作 ( ext{Id}(n))),单位函数 (varepsilon(n)=[n=1])。
二、狄利克雷卷积
1. 定义与性质
定义:对于两个数列函数 (f,g),定义它们的 狄利克雷卷积 (h=f*g) 为
(displaystyle h(x)=sum_{amid x}f(a)gleft(frac{x}{a} ight))
性质:狄利克雷卷积满足交换律、结合律、对加法的分配律,有单位元 (varepsilon)。
-
交换律:(f*g=g*f)。
-
结合律:((f*g)*h=f*(g*h))。
-
分配律:(f*(g+h)=f*g+f*h)。
-
单位元:(f*varepsilon=f)。(其中 (varepsilon) 为单位函数 (varepsilon(x)=[x=1]))
若 (f,g) 是积性函数,则 (f*g) 也是积性函数。
2. 常用卷积
(varepsilon=mu*1 Leftrightarrowvarepsilon(n)=sum_{dmid n}mu(d)) (d=1*1 Leftrightarrow d(n)=sum_{dmid n}1)
(sigma= ext{Id}*1 Leftrightarrow sigma(n)=sum_{dmid n}d) (sigma_k= ext{Id}_k*1 Leftrightarrow sigma_k(n)=sum_{d|n} d^k)
(varphi=mu* ext{Id}Leftrightarrowvarphi(n)=sum_{dmid n}dcdotmu(frac{n}{d})Leftrightarrow ext{Id}=varphi*1Leftrightarrow ext{Id}(n)=sum_{dmid n}varphi(d))
三、莫比乌斯函数
定义:(mu) 为莫比乌斯函数,定义为
(mu (n)=egin{cases}1&{n=1}\(-1)^k&c_{1,2,...,k}=1 (n=prod_{i=1}^k p_i^{c_i})\0&c_i>1end{cases})
性质:莫比乌斯函数是一个积性函数。
(sum_{dmid n}mu (d)=egin{cases}1&{n=1}\0&n eq 1end{cases}),即 (sum_{dmid n}mu(d)=varepsilon(n)),也就是 (mu*1=varepsilon)。
- 证明:设 (n=prod_{i=1}^k {p_i}^{c_i},n'=prod_{i=1}^k p_i),那么 (sum_{dmid n}mu(d)=sum_{dmid n'}mu(d)=sum_{i=0}^k C_k^icdot(-1)^i=(1-1)^k=[n=1])。
在狄利克雷卷积的意义下,(mu*1=varepsilon),即 (mu) 和 (1) 互为逆元。
//线性筛求莫比乌斯函数 vis[0]=vis[1]=1,u[1]=1; for(int i=2;i<=n;i++){ if(!vis[i]) p[++cnt]=i,u[i]=-1; for(int j=1;j<=cnt&&i*p[j]<=n;j++){ vis[i*p[j]]=1; if(i%p[j]==0){u[i*p[j]]=0;break;} u[i*p[j]]=-u[i]; } }
四、莫比乌斯反演
公式:设 (f(n),g(n)) 为两个数论函数。
如果有 (f(n)=sum_{dmid n}g(d)),那么有 (g(n)=sum_{dmid n}mu(d)f(frac{n}{d}))。
证明:其实就是,若 (f=g*1),则 (g=mu*f)。两边同时卷 (mu) 即得。
具体地,(f*mu=g*1*muRightarrow f*g=g)(其中 (1*mu=varepsilon))。
补充:
-
(f(n)=sum_{dmid n}g(d)Leftrightarrow g(n)=sum_{dmid n}mu(d)f(frac{n}{d}))。
-
(f(n)=sum_{nmid d}g(d)Leftrightarrow g(n)=sum_{nmid d}mu(frac{d}{n})f(d))。
五、一些应用
可参考 莫比乌斯反演 - OI Wiki。
求解内容 | 问题形式 | 题目 |
---|---|---|
(sum_{i=1}^nsum_{j=1}^m[gcd(i,j)=k]) | (gcd) 定值统计 | 「HAOI 2011」Problem B |
(sum_{i=1}^n ext{lcm}(i,n)) | 非对称 ( ext{lcm}) | 「SPOJ 5971」LCM Sum |
(sum_{i=1}^nsum_{j=1}^m ext{lcm}(i,j)) | 对称 ( ext{lcm}) | 「BZOJ 2154」Crash 的数字表格 |
(sum_{i=1}^nsum_{j=1}^m icdot jcdot gcd(i,j)) | 带系数的 (gcd) 统计 | 「Luogu 3768」简单的数学题 |
(sum_{i=1}^nsum_{j=1}^m d(icdot j)) | 约数个数统计 | 「SDOI2015」约数个数和 |
「SDOI2015」约数个数和 要用到的一个式子:(d(icdot j)=sum_{xmid i}sum_{ymid j}[gcd(x,y)=1])。
六、套路总结
关于莫比乌斯反演:
-
对于布尔类型的求和可以考虑用 (varepsilon(n)=[n=1]) 替换,再通过 (sum_{dmid n}mu(d)=varepsilon(n)) 来变形。
-
已知 (f(x)),可以考虑设一个 (g(x)=sum_{xmid d}f(d)),化简 (g(x)) 后,根据莫比乌斯反演,(f(x)=sum_{xmid d}mu(frac{d}{x})g(d)),再将 (g) 代入 (f)。
- 灵活变换枚举条件。含有向下取整的式子可以变换枚举顺序提到前面,方便 整除分块。
关于推式子:
-
常见的 (gcd) 化法:
-
1. 例如把 (sum_{i=1}^nsum_{j=1}^m [gcd(i,j)=k]) 化简为 (sum_{i=1}^{lfloor frac{n}{k} floor}sum_{j=1}^{lfloor frac{m}{k} floor} [gcd(i,j)=1])。
-
2. 例如把 (sum_{i=1}^nsum_{j=1}^msum_{dmid i,dmid j,gcd(frac{i}{d},frac{j}{d})=1}frac{icdot j}{d}) 换成 (sum_{d=1}^n dcdot sum_{i=1}^{lfloor frac{n}{d} floor}sum_{j=1}^{lfloor frac{m}{d} floor}[gcd(i,j)=1]cdot icdot j)。
-
-
常见的约数化法:对于 (dmid x),可以考虑枚举 (d) 或 (frac{x}{d}),改变求和顺序。对于出现了 (frac{n}{d}) 的情况,有时可以考虑设 (d'=frac{n}{d}) 进行变换。
-
1. 比如把 (sum_{i=1}^nsum_{j=1}^msum_{xmid i}sum_{ymid j} [gcd(x,y)=1]) 变成 (sum_{x=1}^nsum_{y=1}^m lfloorfrac{n}{x} floor lfloorfrac{m}{y} floor [gcd(x,y)=1])。
-
2. 比如把 (sum_{d=1}^nsum_{dmid i}^nsum_{dmid j}^mmu(d)cdot icdot j) 变为 (sum_{d=1}^nmu(d)cdot d^2cdot sum_{i=1}^{lfloor frac{n}{d} floor}sum_{j=1}^{lfloor frac{m}{d} floor}icdot j)。
-
3. 设 (d'=frac{n}{d})。比如把 (sum_{dmid n}frac{n^2cdotvarphi( frac{n}{d})}{d}) 变成 (ncdotsum_{d'mid n}d'cdot varphi(d'))。
-
-
有时可以将式子转化成常见的积性函数。一个简单的例子:把 (sum_{i=1}^x [gcd(i,x)=1]) 转化为 (varphi(x))。
-
对于直接贡献的可以考虑变换枚举顺序使之变成系数。比如把 (sum_{i=1}^x [dmid i]) 变为 (frac{x}{d}),(sum_{i=1}^nsum_{j=1}^m icdot j) 变成 (frac{n(n+1)}{2} imes frac{m(m+1)}{2})。