狄利克雷卷积及莫比乌斯反演
1.数论函数
定义两个数论函数\(f(n)\)与\(g(n)\)
则\((f+g)(n)=f(n)+g(n)\)
2.狄利克雷卷积
定义两个数论函数的狄利克雷卷积\(*\)
定义数论函数\(t=f*g\)
则\(\mathbf t(n)=\sum_{ij=n}\mathbf f(i)\mathbf g(j)\)
显然,\(f*g=g*f,f*(g*k)=(f*g)*k,f*(g+k)=f*g+f*k\)
定义数论函数\[f\]的单位元\(ϵ\),使得\(\epsilon\ast\mathbf f=\mathbf f*ϵ\)
不难看出,当\(i\)等于\[1\]时,\(ϵ(i)=1\),否则,\(ϵ(i)=0\)
定义数论函数\(g\)为函数\[f\]的逆元,即\(f*g=ϵ\)
则\(g(n)=\dfrac{1}{f(1)}\left([n==1]−\sum\limits_{i|n,i\ne1}f(i)g(\dfrac{n}{i})\right)\)
3.积性函数
如果一个数论函数\[f\]当\[n⊥m\]的时候满足\[f(nm)=f(n)f(m)\],则称此函数为积性函数
常见的积性函数:\[*σ*_0\](\[n\]的因数个数),\[\varphi(n)\](\[[1,n]\]中与\[n\]互质的数的个数)
结论:
1.两个积性函数的狄利克雷卷积是积性函数
证明如下:
设\[t=f*g\],则
\[
\begin{aligned}\mathbf t(nm)&=\sum_{d\mid nm}\mathbf f(d)\mathbf g\left(\frac{nm}d\right)\\&=\sum_{a\mid n,b\mid m}\mathbf f(ab)\mathbf g\left(\frac{nm}{ab}\right)\\&=\sum_{a\mid n,b\mid m}\mathbf f(a)\mathbf f(b)\mathbf g\left(\frac na\right)\mathbf g\left(\frac mb\right)\\&=\left(\sum_{a\mid n}\mathbf f(a)\mathbf g\left(\frac na\right)\right)\left(\sum_{b\mid m}\mathbf f(b)\mathbf g\left(\frac mb\right)\right)\\&=\mathbf t(n)\mathbf t(m)\end{aligned}
\]
2.一个积性函数的逆也是积性函数
证明如下:
设\[g\]为\[f\]的逆元
1.当\[nm=1\]时,则\[g(1)=1\],结论成立
2.当\[nm>1\]时,则有
\[
\begin{aligned}\mathbf g(nm)&=-\sum_{d\mid nm,d\neq1}\mathbf f(d)\mathbf g\left(\frac{nm}d\right)\\&=-\sum_{a\mid n,b\mid m,ab\neq1}\mathbf f(ab)\mathbf g\left(\frac{nm}{ab}\right)\\&=-\sum_{a\mid n,b\mid m,ab\neq1}\mathbf f(a)\mathbf f(b)\mathbf g\left(\frac na\right)\mathbf g\left(\frac mb\right)\\&=\mathbf f(1)\mathbf f(1)\mathbf g(n)\mathbf g(m)-\sum_{a\mid n,b\mid m}\mathbf f(a)\mathbf f(b)\mathbf g\left(\frac na\right)\mathbf g\left(\frac mb\right)\\&=\mathbf g(n)\mathbf g(m)-\left(\sum_{a\mid n}\mathbf f(a)\mathbf g\left(\frac na\right)\right)\left(\sum_{b\mid m}\mathbf f(b)\mathbf g\left(\frac mb\right)\right)\\&=\mathbf g(n)\mathbf g(m)-\epsilon(n)\epsilon(m)\\&=\mathbf g(n)\mathbf g(m)\end{aligned}
\]
Tips:对于一个积性函数,显然\[f(1)=1\],\[f(1)\ne1\]的情况暂时不加讨论
运用:
对于一个积性函数,可以用线性筛的方法来快速递推得到
我们可以把一个积性函数\[f\],可以把\[f(n)\]分解为\[\mathbf f(n)=\prod_{i=1}^t\mathbf f(p_i^{k_i})\],即是把它质因数分解
由于在线性筛素数的时候我们可以顺便求出每个数的最小质因数 \[p_1 \]、最小质因数的次数\[ k_1 \]以及\[n/p_1^{k_1}\],就可以利用递推式 \[ \mathbf f(n)=\mathbf f(p_1^{k_1})\mathbf f(n/p_1^{k_1})\]直接计算 \[\mathbf f\]了
由于\[σ_0 \]和 \[\varphi\]在素数幂处的值很容易得到,\[k>0\]时,\[\sigma_0(p^k)=k+1,\varphi(p^k)=p^{k-1}(p-1)\]
从而推出公式:
\[
\sigma_0(n)=\prod_{i=1}^t(k_i+1), \varphi(n)=\prod_{i=1}^np_i^{k_i-1}(p_i-1)=n\prod_{i=1}^t\left(1-\frac1{p_i}\right)
\]
4.莫比乌斯反演
定义\[\mathbf1\]的逆是\[\mu\]
这样对于\[\mathbf g=\mathbf f\ast\mathbf1\],就有\[\mathbf f=\mathbf f\ast\mathbf1\ast\mu=\mathbf g\ast\mu\]
即如果\[\mathbf g(n)=\sum_{d\mid n}\mathbf f(d)\],则\[\mathbf f(n)=\sum_{d\mid n}\mu\left(\frac nd\right)\mathbf g(d)\]
这就证明了莫比乌斯反演
对于\[\mu\]的求法
显然,由于\[\mathbf1\]是积性的,而且\[ \mu \]是\[ \mathbf1\] 的逆,所以\[\mu\]也是积性的
可得:
\[
\mu(p^k)=\begin{cases}1&k=0\\-1&k=1\\0&k>1\end{cases}
\]
从而得出:
\[
\mu(n)=\begin{cases}(-1)^t&n=p_1p_2\dots p_t\text{且$ p_i $互不相同}\\0&n\text{不满足上述条件}\end{cases}
\]
Tips:对于\[n=1\],则\[t=0\]
反演推论:
\[ [n==1]=\sum_{d|n}{\mu(d)} \]
从\(\mu\)是1的逆显然很好理解
原文地址:https://www.cnblogs.com/magicduck/p/11423193.html
- kafka源码系列之mysql数据增量同步到kafka
- Hbase源码系列之BufferedMutator的Demo和源码解析
- Kafka源码系列之0.10版本的Producer源码解析及性能点讲解
- Spark源码系列之spark2.2的StructuredStreaming使用及源码介绍
- Hbase源码系列之scan源码解析及调优
- spark源码系列之内部通讯的三种机制
- Hbase源码系列之regionserver应答数据请求服务设计
- 大数据基础系列之kafkaConsumer010+的多样demo及注意事项
- 大数据基础系列之kafka011生产者缓存超时,幂等性和事务实现
- 大数据基础系列之提交spark应用及依赖管理
- 大数据集群安全系列之kafka使用SSL加密认证
- 基于zookeeper leader选举方式一
- Spark与mongodb整合完整版本
- spark源码系列之累加器实现机制及自定义累加器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Laravel validate error处理,ajax,json示例
- PHP 图片合成、仿微信群头像的方法示例
- python写文件时覆盖原来的实例方法
- Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
- PHP判断当前使用的是什么浏览器(推荐)
- PHP 计算两个时间段之间交集的天数示例
- laravel model 两表联查示例
- Laravel使用模型实现like模糊查询的例子
- Laravel 模型使用软删除-左连接查询-表起别名示例
- PHP上传图片到数据库并显示的实例代码
- Laravel 5.5 实现禁用用户注册示例
- 解决php用mysql方式连接数据库出现Deprecated报错问题
- Laravel自动生成UUID,从建表到使用详解
- Python中Selenium库使用教程详解
- 浅谈laravel aliases别名的原理