Dirichlet 卷积学习笔记
数论函数:数论函数亦称算术函数,一类重要的函数,指定义在正整数集上的实值或复值函数,更一般地,也可把数论函数看做是某一整数集上定义的函数。
然而百科在说什么鬼知道呢,感性理解一下,数论函数的定义域是正整数,值域也是正整数。
数论函数的相关运算与性质
- 设有数论函数(f{h,f,g})。
-
加法运算
((mathbf {f}+mathbf {g})(n)=mathbf {f}(n)+mathbf {g}(n))
即每项相加
-
数乘运算
((xmathbf f )(n)=xmathbf f(n))
即每项相乘
-
卷积乘(*)
若(mathbf h=mathbf f*mathbf g)
那么(mathbf h(n)=sumlimits_{i|n}mathbf f(i)mathbf g(frac{n}{i}))
-
交换律
(f f*g=g*f)
显然 -
结合律
((mathbf f*mathbf g)*mathbf h=mathbf f*(mathbf g*mathbf h))
意会 -
分配律
((mathbf f+ mathbf g)*mathbf h=mathbf f*mathbf h+mathbf g*mathbf h)
意会 -
单位元
定义数论函数(epsilon(n)=[n=1])
对任意(mathbf f),有(mathbf f=mathbf f*epsilon)
显然 -
逆元
对于任意的(mathbf f(1) ot=0)的数论函数,存在一个(mathbf g)使得(mathbf g*mathbf f=epsilon)
对于(mathbf g)有构造
[mathbf g(n)=frac{1}{mathbf f(1)}([n=1]-sum_{i|n,i ot=1}mathbf f(i)mathbf g({frac{n}{i}})) ]证明代入卷积计算就可以了。
-
积性函数
满足若(a ot b),那么(mathbf f(ab)=mathbf f(a)mathbf f(b))的数论函数被成为积性函数。
-
两个积性函数的卷积是积性函数
证明重要吗 -
一个积性函数的逆也是积性函数
证明重要吗 -
任何一个积性函数都可以线性筛出来
常见积性函数及其性质
令(n=prodlimits_{i=1}^k p_i^{c_i})
- (mathbf 1(n)=1),常函数
- (mathbf {Id}(n)=n),常函数
- (mathbf {Id}^k(n)=n^k),常函数的一般形式
- (epsilon(n)=[n=1]),单位元
- (mu(n) = [max(c_1,c_2,dots,c_k) le 1](-1)^k) ,莫比乌斯函数
- (varphi(n)=nprodlimits_{i=1}^k(1-frac{1}{p_i})),欧拉函数
- (mathbf d(n)=sumlimits_{d|n}1),约数个数
- (sigma(n)=sumlimits_{d|n}d),约数和
- (lambda(n)=(-1)^k)
-
莫比乌斯函数
我们尝试把(mu)给定义出来,定义(mu)为(mathbf 1)的逆。
则有(mu * mathbf 1=epsilon)
换成我们熟悉的形式就是(sum_{d|n}mu(d)=[n=1])
尝试构造(mu),显然(mu(1)=1)。
然后发现对于质数(p),满足(sum_{d|p^k}mu=0),即(1+mu(p)+mu(p^1)+dots+mu_(p^k)=0)。
通过一些简单的反证可以得到(mu(p^k)=-[kle 1],k ot=0)
因为(mathbf1)是积性函数,所以( t{Ta})的逆(mu)也是积性函数。
然后我们就可以得到(Ta)的函数式,即
(mu(n) = [max(c_1,c_2,dots,c_k) le 1](-1)^k)
或者说是
[mu(n)=left{egin{aligned}(-1)^k if squarefree \0 ohterwise\end{aligned} ight. ]特殊的,(mu(1)=1).
(squarefree) 表示对(n),(forall c_i=1).
之类的一些定义。
-
莫比乌斯反演
若(mathbf g=mathbf f *mathbf 1),那么(mu*mathbf g=mathbf f*mu*mathbf 1),即(mathbf f=mu*mathbf g)
换成熟悉的形式,若(mathbf g(n)=sumlimits_{d|n}mathbf f(d)),那么$mathbf f(n)=sumlimits_{d|n} mu(d) imes mathbf g(frac{n}{d}) $,于是我们较为简单的证明了反演。
对于实际中更加常用的第二类反演,我们可以定义一种类似与卷积的新运算进行证明。
筛法:
for(int i=2;i<=N;i++) { if(!ispri[i]) { mu[i]=-1; pri[++cnt]=i; } for(int j=1;j<=cnt&&pri[j]*i<=N;j++) { ispri[i*pri[j]]=1; if(i%pri[j]==0) break; else mu[i*pri[j]]=-mu[i]; } }
-
-
欧拉函数
其实这个也可以定义出来的,不过从意义的角度说明( t{Ta})会更加的自然。
(varphi(n))代表(1 sim n-1)中与(n)互质的数的个数,考虑证明( t{Ta})的计算式。
可以用容斥说明一波,不过这个用用和积性函数有关的东西叭。
(varphi(p^k)=p^k-p^{k-1}=p^k(1-frac{1}{p}))
唯一分解(n=prodlimits_{i=1}^k p_i^{c_i})
那么(varphi(n)=prodlimits_{i=1}^kp_i^{c_i}(1-frac{1}{p_i})=nprodlimits_{i=1}^k(1-frac{1}{p_i}))
然后我们考虑证明(Ta)的一个性质,(varphi *mathbf 1=mathbf {Id}),也就是我们熟悉的(sum_{d|n}varphi(d)=n)。
证明起来很简单,设(mathbf t=varphi *mathbf 1),那么(mathbf t)为积性函数,我们先搞出( t{Ta})的素数幂的式子,然后乘起来就行了。
筛法
for(int i=2;i<=N;i++) { if(!ispri[i]) { pri[++cnt]=i; phi[i]=i-1; } for(int j=1;j<=cnt&&i*pri[j]<=N;j++) { ispri[i*pri[j]]=1; if(i%pri[j]==0) { phi[i*pri[j]]=phi[i]*pri[j]; break; } else fphi[i*pri[j]]=phi[i]*(pri[j]-1); } }
-
其他相关性质
-
(varphi *mathbf 1=mathbf {Id}Rightarrow varphi=mu *mathbf {Id})
-
(mathbf d=mathbf1 *mathbf1 Rightarrow mu*mathbf d=mathbf1)
-
(sigma=mathbf {Id}*mathbf 1 Rightarrow mathbf {Id}=sigma*mu)或(sigma=mathbf {Id}*mathbf 1 Rightarrow sigma=varphi*mathbf d)
-