狄利克雷卷积总结
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了狄利克雷卷积总结相关的知识,希望对你有一定的参考价值。
狄利克雷卷积总结
积性函数
常见的积性函数: φ , μ , σ , d \\large \\varphi,\\mu,\\sigma,d φ,μ,σ,d
常见的完全积性函数: ϵ , I , i d \\large \\epsilon,I,id ϵ,I,id
函数名 | 数学表达式 |
---|---|
欧拉函数 | φ ( n ) \\varphi(n) φ(n) |
莫比乌斯函数 | μ ( n ) \\mu(n) μ(n) |
元函数 | ϵ ( n ) = [ n = 1 ] \\epsilon(n)=[n=1] ϵ(n)=[n=1] |
恒等函数 | I ( n ) = 1 I(n)=1 I(n)=1 |
约数个数函数 | d ( n ) d(n) d(n) |
约数和函数 | σ ( n ) \\sigma(n) σ(n) |
一次函数 | i d ( n ) = n id(n)=n id(n)=n |
狄利克雷卷积
狄利克雷卷积的性质
证明性质3
恒等函数在狄利克雷卷积中是相当于单位元的存在
f ∗ ϵ = f \\large f* \\epsilon =f f∗ϵ=f
证明:
= ∑ d ∣ n f ( d ) ϵ ( n d ) \\large =\\sum\\limits_{d|n}f(d)\\epsilon(\\dfrac{n}{d}) =d∣n∑f(d)ϵ(dn)
当且仅当 d = n d=n d=n时, f ( d ) ϵ ( n d ) = f ( n ) ≠ 0 f(d)\\epsilon(\\dfrac{n}{d})=f(n)\\ne 0 f(d)ϵ(dn)=f(n)=0
则 f ∗ ϵ = f \\large f * \\epsilon = f f∗ϵ=f
莫比乌斯反演的证明
若 g ( n ) = ∑ d ∣ n f ( d ) g(n)=\\sum\\limits_{d|n}f(d) g(n)=d∣n∑f(d)
则 f ( n ) = ∑ d ∣ n μ ( d ) g ( n d ) f(n)=\\sum\\limits_{d|n}\\mu(d)g(\\dfrac{n}{d}) f(n)=d∣n∑μ(d)g(dn)
证明:
利用 D i r i c h l e t Dirichlet Dirichlet卷积的性质即可: μ ∗ I = ϵ \\mu * I =\\epsilon μ∗I=ϵ
给出的条件等价于
g = f ∗ I \\large g=f* I g=f∗I
g ∗ μ = f ∗ μ ∗ I = f ∗ ϵ = f \\large g*\\mu= f * \\mu * I =f * \\epsilon=f g∗μ=f∗μ∗I=f∗ϵ=f
杜教筛
杜教筛可用来在非线性时间求解积性函数的前缀和
引用一波,但是第一行没写好。
= ∑ i = 1 n ∑ d ∣ i f ( d ) g ( i d ) = ∑ i = 1 n ∑ d ∣ i f ( i d ) g ( d ) \\large=\\sum\\limits_{i=1}^n\\sum\\limits_{d|i} f(d)g(\\dfrac{i}{d})=\\sum\\limits_{i=1}^n\\sum\\limits_{d|i} f(\\dfrac{i}{d})g(d) =i=1∑nd∣i∑f(d)g(di)=i=1∑nd∣i∑f(di)g(d)
这样比较好理解。
几个简单的应用
1. μ \\mu μ的前缀和
S ( n ) = ∑ i = 1 n ( f ∗ g ) ( i ) − ∑ i = 2 n g ( i ) S ( n i ) \\large S(n)=\\sum\\limits_{i=1}^n(f*g)(i)-\\sum\\limits_{i=2}^ng(i)S(\\dfrac{n}{i}) S(n)=i=1∑n(f∗g)(i)−i=2∑ng(i)S(in)
f = μ , g = I , f ∗ g = ϵ f=\\mu, g=I,f*g=\\epsilon f=μ,g=I,f∗g=ϵ
∑ i = 1 n ϵ ( i ) = 1 \\sum\\limits_{i=1}^n\\epsilon(i)=1 i=1∑nϵ(i)=1
∑ i = 2 n g ( i ) S ( n i ) \\sum\\limits_{i=2}^ng(i)S(\\dfrac{n}{i}) i=2∑ng(i)S(in) 这一部分用整除分块+递归解决。
∑ i = l r I ( i ) = r − l + 1 \\sum\\limits_{i=l}^r I(i)=r-l+1 i=l∑rI(i)=r−l+1
采用预处理+记忆化 节省时间。
核心代码:
unordered_map<int,int>smu;
int get_mu(int n){
if(n<N) return mu[n];//线性筛预处理一部分(5e6)
if(smu[n]) return smu[n];//记忆化
ll s=1;//左部分
for(ll l=2,r;l<=n;l=r+1){ //整除分块.
r=n/(n/l);
s-=(r-l+1)*get_mu(n/l);
}
return smu[n]=s;
}
2. φ \\varphi φ的前缀和
考虑
φ
∗
I
=
i
d
\\varphi * I =id
φ∗I=以上是关于狄利克雷卷积总结的主要内容,如果未能解决你的问题,请参考以下文章