关于积性函数的学习小记

前言

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

积性函数的定义
  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 写在外面。


狄利克雷卷积和莫比乌斯反演
  • 数论函数 f g的卷积定义为, (fg)(n)=d|nf(d)g(nd) 。它满足交换律,结合律,加法满足分配律(没什么用),另外, fϵ=f ,若 f g为积性函数,则 fg 为积性函数,即具有传递性。
    而根据这一点,我们可以写出 (fg)(n)=(fg)(pkii)
  • 卷积在算法竞赛总常用的优化时间复杂度的方法是,给原来的式子一个 1 ,就是把f写成 f1 ,这样子可以转化式子,例如 n=li=1pkii g(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国家集训队论文中《积性函数求和的几种方法》——绍兴一中,任之洲

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值