zoukankan      html  css  js  c++  java
  • Dirichlet 卷积学习笔记

    Dirichlet 卷积学习笔记

    数论函数:数论函数亦称算术函数,一类重要的函数,指定义在正整数集上的实值或复值函数,更一般地,也可把数论函数看做是某一整数集上定义的函数。

    然而百科在说什么鬼知道呢,感性理解一下,数论函数的定义域是正整数,值域也是正整数。

    数论函数的相关运算与性质

    • 设有数论函数(f{h,f,g})
    1. 加法运算

      ((mathbf {f}+mathbf {g})(n)=mathbf {f}(n)+mathbf {g}(n))

      即每项相加

    2. 数乘运算

      ((xmathbf f )(n)=xmathbf f(n))

      即每项相乘

    3. 卷积乘(*)

      (mathbf h=mathbf f*mathbf g)

      那么(mathbf h(n)=sumlimits_{i|n}mathbf f(i)mathbf g(frac{n}{i}))

    4. 交换律

      (f f*g=g*f)

      显然

    5. 结合律

      ((mathbf f*mathbf g)*mathbf h=mathbf f*(mathbf g*mathbf h))

      意会

    6. 分配律

      ((mathbf f+ mathbf g)*mathbf h=mathbf f*mathbf h+mathbf g*mathbf h)

      意会

    7. 单位元

      定义数论函数(epsilon(n)=[n=1])

      对任意(mathbf f),有(mathbf f=mathbf f*epsilon)

      显然

    8. 逆元

      对于任意的(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}})) ]

      证明代入卷积计算就可以了。

    9. 积性函数

      满足若(a ot b),那么(mathbf f(ab)=mathbf f(a)mathbf f(b))的数论函数被成为积性函数。

    10. 两个积性函数的卷积是积性函数

      证明重要吗

    11. 一个积性函数的逆也是积性函数

      证明重要吗

    12. 任何一个积性函数都可以线性筛出来

    常见积性函数及其性质

    (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)
    1. 莫比乌斯函数

      我们尝试把(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];
              }
          }
      
    2. 欧拉函数

      其实这个也可以定义出来的,不过从意义的角度说明( 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);
              }
          }
      
    3. 其他相关性质

      • (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)

  • 相关阅读:
    列表和元组
    UVM宏
    UVM中重要函数
    组合模式(composite)
    装饰器模式(Decorator)
    适配器模式(Adapter)
    桥接模式
    原型模式(prototype)
    单例模式(singleton)
    UML类图
  • 原文地址:https://www.cnblogs.com/butterflydew/p/10017738.html
Copyright © 2011-2022 走看看