关于积性函数的学习小记
来源:互联网 发布:数据统计的方法有哪些 编辑:程序博客网 时间:2024/05/20 20:57
前言
好菜啊,学这些东西快学傻了。我想整理一下会舒服点。
积性函数的定义
- 若
f(x) 为定义域为正整数域,值域为复数域的函数,我们就称之为数论函数。 - 对于在
a,b 互质的条件下,满足f(ab)=f(a)f(b) 的数论函数,我们称之为积性函数。 - 若对于任意一对
a,b 都满足,则称之为完全积性函数。
常见的积性函数与其性质
- 除数函数
σk(n)=∑d|ndk ,即n的每个约数的k次方的和,注意不是σk(n) 。 - 元函数,即下面要讲的狄利克雷卷积的单位元,
ϵ(n)=[n=1] ,完全积性。 - 恒等函数
1(n) ,一般写在卷积中写为1 ,有时候不会写出来,肯定也是完全积性的。 - 幂函数
idk(n)=nk ,完全积性。 - 莫比乌斯函数
μ(n) ,μ(1)=1 ,设n=∏li=1pkii ,则当l=1时μ(n)=(−1)k ,l>1时为0。
值得注意的是∑d|nμ(d)=[n=1] ,证明的思路是考虑每个d的ki=0/1 用组合数表示前面的式子,再用二项式定理证明。
二项式定理:(a−b)k=∑ki=0Cikaibk−i 。
这样我们可以得到,μ∗1=ϵ ,可以对着每一项看一看是不是。 - 欧拉函数,
φ(n)=∑ni=1[(i,n)=1]⋅1 。
欧拉函数相关:
设n=∏li=1pkii φ(n)=n⋅∏li=1(1−1pi) 。- 若l=1,则
φ(n)=pk−pk−1 ∑ni=1[(i,n)=1]⋅i=n⋅φ(n)2 。我们知道若(i,n)=1 ,根据辗转相除,可知(n−i,n)=1 ,那么可以把这些数对配对起来凑成n。需要注意的是,如果n=1,要加一个1。- 对于正整数n>2,
φ(n) 为偶数。
注意到上面欧拉函数的通项公式可以写成
狄利克雷卷积和莫比乌斯反演
- 数论函数
f 和g 的卷积定义为,(f∗g)(n)=∑d|nf(d)g(nd) 。它满足交换律,结合律,加法满足分配律(没什么用),另外,f∗ϵ=f ,若f 和g 为积性函数,则f∗g 为积性函数,即具有传递性。
而根据这一点,我们可以写出(f∗g)(n)=∏(f∗g)(pkii) - 卷积在算法竞赛总常用的优化时间复杂度的方法是,给原来的式子一个
1 ,就是把f 写成f∗1 ,这样子可以转化式子,例如n=∏li=1pkii ,g(n)=∑d|nf(n) ,变为g(n)=∑d|nf(n)1(nd) ,得到g(n)为积性函数,那么我们现在相当于g(n)=∏li=1g(pkii)=∏li=1(f∗1)(pkii)=∏li=1∑kij=0f(pji)⋅1(pki−ji) ,就是这样了。 - 再举个例子欧拉函数,就是
∑d|nφ(d)=n ,这个仍然是上面的方法,左边卷积上1 ,很容易发现∑kij=0φ(pji)=pkii ,然后∏ 起来就是n了。 - 来讲讲莫比乌斯反演吧,若
g(n)=∑d|if(d) ,即g=f∗1 ,两边乘μ ,根据莫比乌斯函数性质,可得g∗μ=f∗ϵ ,即f(n)∗ϵ(1)=∑d|ng(d)μ(nd) ,因为元函数只有第一位是1,所以其他都省掉。在过程中,我们发现并不需要f为积性函数。类似的可以把∑i|n 换成∑n|i ,即i为n的倍数。 - 一个演绎:
φ∗1=id ,两边乘μ ,则φ∗ϵ=id∗μ ,那么可见,φ(n)=∑d|nμ(d)nd 。
可见,化为卷积来进行宏观的转化,再写为多项式,就能弄出很优美的东西。
杜教筛
利用狄利克雷卷积构造,我们可以快速算出一类积性函数的前缀和。
设
根据函数f的性质,我们要构造一个
由于我们要求
这样的话,我们后面用根号n的时间递归解决。而前一项是一个卷积。那么我们可以发现杜教筛的局限:卷积必须要能够快速算出来,才可以用这种算法。在一般的杜教筛题目中,这个一般是手算的。
例子就不写了,而杜教筛直接上时间复杂度是
参考资料
浅谈一类积性函数的前缀和——唐老师
2016国家集训队论文中《积性函数求和的几种方法》——绍兴一中,任之洲
1 0
- 关于积性函数的学习小记
- 关于Linux的学习小记
- 关于机器学习课程的小记
- 关于rand()函数和srand()函数的小记
- 函数指针学习小记
- 关于aerith的小记
- 关于sqlite的学习小记,求各位大大指导
- BZOJ1188 SG函数学习小记
- JS的学习小记
- Intent的学习小记
- Intent的学习小记
- 关于虚函数、纯虚函数、抽象类的疑惑小记
- linux 关于线程不安全函数localtime小记
- 关于Java 字符串相关函数小记
- 关于交通堵塞的讨论小记
- 关于创建用户的小记
- 关于磁盘配额的小记
- 关于SystemUI的简单小记
- locate
- Linux(centos)上配置https
- 关于“交互式-非交互式”与“登录-非登陆”shell的总结
- [kuangbin带你飞]专题七 线段树 【A、B、C、E、G、H】
- 关于vs2008修改执行程序文件名
- 关于积性函数的学习小记
- Android 4.0 Launcher2源码分析——启动过程分析
- Laravel中用户认证功能的实现
- Centos7.3+Influxdb1.2+Grafana4.2
- 关于vs2008修改执行程序文件名
- Ubuntu 16.04 安装 Caffe
- [nginx] 异步非阻塞多进程模型
- HTML <input> 标签的 disabled 属性
- 百度url 参数详解全