特殊函数的前缀和

ORZ唐老师
唐老师的那篇积性函数前缀和666呀。摩拜嘻嘻。

来一篇学后感。
记任意算术函数 f 的前缀和为:

Sf(n)=i=1nf(i)

记:

C(n)=d|nA(d)B(nd)

注:
上式子形如 C(n)=ab=nA(a)B(b)
称这一卷积形式为狄利克雷卷积
记为 AB=C
狄利克雷卷积满足
A(BD)=(AB)D
AB=BA
则有:

SA(n)=SC(n)i=2B(i)SA(ni)

SB(n)=SC(n)i=2A(i)SB(ni)

证明:

C(n)=d|nA(d)B(nd)A(n)=C(n)d|n,dnA(d)B(nd)

SA(n)=SC(n)i=1nd|i,diA(d)B(id)=SC(n)i=1nd|iA(d)B(id)SA(n)

对于
i=1nd|iA(d)B(id)=i=1nd|iB(d)A(id)=d=1nB(d)d|iA(id)=d=1nB(d)SA(nd)

所以有:

SA(n)=SC(n)i=2B(i)SA(ni)

同理有:

SB(n)=SC(n)i=2A(i)SB(ni)

对上式变形:

SA(n)=SC(n)L=1mSA(L)i=nL+1+1nLB(i)i=2nm+1B(i)SA(ni)=SC(n)L=1mSA(L)(SB(nL)SB(nL+1))i=2nm+1B(i)SA(ni)

通常我们令 m=n

对于不大于 m i,通过预处理可以直接得到。

对低有一个很重要的性质

nab=nab,

证明:

nab=nn mod aab=(nn mod a)(nn mod a) mod (ab)ab=nab+(n mod a)(n mod a) mod (ab)ab=nab

这也就是说 ,我们按照:

SA(n)=SC(n)L=1mSA(L)(SB(nL)SB(nL+1))i=2nm+1B(i)SA(ni)

计算 SA(n) 时。我们最终仅仅只是计算了 i[1,m] 所有的 SA(ni)

故。我们可以从小到大递推得到最终的 SA(n)

计算复杂度于计算 SC,B,SB 有关。故具体情况具体分析

提供一组结论

对于计算: ni=1O((ni)k)

k>1 时:

i=1nO((ni)k)=O(nk)

k=1 时:

i=1nO((ni)k)=O(nlog n)

0k<1 时:

i=1nO((ni)k)=O(nk+12)

有了上面的工具对于很多函数前缀和的计算久方便的多了

例如计算 Sφ

我们有: φI=N

其中: I(n)=1,N(n)=n

直接套用公式:

SA(n)=SC(n)L=1mSA(L)(SB(nL)SB(nL+1))i=2nm+1B(i)SA(ni)

得到:

Sφ(n)=n(n+1)2L=1mSφ(L)(nLnL+1)i=2nm+1Sφ(ni)

应用上式复杂度分析, k=12

T(n)=i=1nO(ni)=O(n12+12)=O(n34)

m=n23,k=13

T(n)=O(n23)

并非 m 越大越好。因为有时候。构造函数的前缀和未必O(1)可以得到。此时要恰当的选取 m <script type="math/tex" id="MathJax-Element-47">m</script>

下面是TLS的博客地址(不过百度第一个就是啦。。真的太火爆了)

http://blog.csdn.net/skywalkert/article/details/50500009

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值