关于积性函数的学习小记

来源:互联网 发布:数据统计的方法有哪些 编辑:程序博客网 时间:2024/05/20 20:57

前言

好菜啊,学这些东西快学傻了。我想整理一下会舒服点。

积性函数的定义

  1. f(x)为定义域为正整数域,值域为复数域的函数,我们就称之为数论函数。
  2. 对于在a,b互质的条件下,满足f(ab)=f(a)f(b)的数论函数,我们称之为积性函数。
  3. 若对于任意一对a,b都满足,则称之为完全积性函数。

常见的积性函数与其性质

  1. 除数函数σk(n)=d|ndk,即n的每个约数的k次方的和,注意不是σk(n)
  2. 元函数,即下面要讲的狄利克雷卷积的单位元,ϵ(n)=[n=1],完全积性。
  3. 恒等函数1(n),一般写在卷积中写为1,有时候不会写出来,肯定也是完全积性的。
  4. 幂函数idk(n)=nk,完全积性。
  5. 莫比乌斯函数μ(n)μ(1)=1,设n=li=1pkii,则当l=1时μ(n)=(1)k,l>1时为0。
    值得注意的是d|nμ(d)=[n=1],证明的思路是考虑每个d的ki=0/1用组合数表示前面的式子,再用二项式定理证明。
    二项式定理:(ab)k=ki=0Cikaibki
    这样我们可以得到,μ1=ϵ,可以对着每一项看一看是不是。
  6. 欧拉函数,φ(n)=ni=1[(i,n)=1]1
    欧拉函数相关:
    n=li=1pkii
    • φ(n)=nli=1(11pi)
    • 若l=1,则φ(n)=pkpk1
    • ni=1[(i,n)=1]i=nφ(n)2。我们知道若(i,n)=1,根据辗转相除,可知(ni,n)=1,那么可以把这些数对配对起来凑成n。需要注意的是,如果n=1,要加一个1。
    • 对于正整数n>2,φ(n)为偶数。

注意到上面欧拉函数的通项公式可以写成φ(n)=li=1φ(pkii)这个可以推广到所有积性函数。而如果是完全积性函数函数,更可以把ki写在外面。


狄利克雷卷积和莫比乌斯反演

  • 数论函数fg的卷积定义为,(fg)(n)=d|nf(d)g(nd)。它满足交换律,结合律,加法满足分配律(没什么用),另外,fϵ=f,若fg为积性函数,则fg为积性函数,即具有传递性。
    而根据这一点,我们可以写出(fg)(n)=(fg)(pkii)
  • 卷积在算法竞赛总常用的优化时间复杂度的方法是,给原来的式子一个1,就是把f写成f1,这样子可以转化式子,例如n=li=1pkiig(n)=d|nf(n),变为g(n)=d|nf(n)1(nd),得到g(n)为积性函数,那么我们现在相当于
    g(n)=li=1g(pkii)=li=1(f1)(pkii)=li=1kij=0f(pji)1(pkiji),就是这样了。
  • 再举个例子欧拉函数,就是d|nφ(d)=n,这个仍然是上面的方法,左边卷积上1,很容易发现kij=0φ(pji)=pkii,然后起来就是n了。
  • 来讲讲莫比乌斯反演吧,若g(n)=d|if(d),即g=f1,两边乘μ,根据莫比乌斯函数性质,可得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)为积性函数,我们现在要算
s(n)=ni=1f(i)
根据函数f的性质,我们要构造一个s(n)关于s(ni)的递推式,那么我们需要找一个合适的函数g(n),使得
ni=1d|if(d)g(id)=ni=1g(i)nid=1f(d)=ni=1g(i)s(ni)
由于我们要求s(n),则把带s(n)的提出来,得到
g(1)s(n)=ni=1(fg)(i)ni=2g(i)s(ni)
这样的话,我们后面用根号n的时间递归解决。而前一项是一个卷积。那么我们可以发现杜教筛的局限:卷积必须要能够快速算出来,才可以用这种算法。在一般的杜教筛题目中,这个一般是手算的。
例子就不写了,而杜教筛直接上时间复杂度是O(n34)的,具体分析可见论文。如果配合线筛,筛出出前n23的预处理,则时间复杂度可达O(n23)。十分的优秀。

参考资料

浅谈一类积性函数的前缀和——唐老师
2016国家集训队论文中《积性函数求和的几种方法》——绍兴一中,任之洲

1 0
原创粉丝点击