莫比乌斯反演---基础

莫比乌斯反演---基础

前置芝士:

1.数论函数

:指定义域为正整数陪域复数函数,每个算术函数都可视为复数的序列

​ ---来自百度百科

2.积性函数:

若f(x)为一个数论函数,且对于每一个互质的a,b满足

[f(a*b)=f(a)*f(b) ]

则f(x)为积性函数.

--完全积性函数:若f(x)为一个数论函数,且对于每一对a,b满足

[f(a*b)=f(a)*f(b) ]

则f(x)为完全积性函数.

例:积性函数有:

[\sigma_{k}(n)(表示n的所有约数的k次幂的和) \ varphi(n)也为不超过n且与n互质的数的个数. \ mu(n) = egin{cases} 1&n=1 \ (-1)^k&n为k个不同质数的积\ 0&else end{cases} ]

完全积性函数有:

[幂函数 n^k\ 单位函数epsilon(n)=egin{cases} 1&n=1\ 0&n>1 end{cases} ]

把积性函数与狄利克雷卷积(下面要学)联系起来,可以得到

若f,g为积性函数,则f*g也为积性函数.

[(f*g)(a imes b)=sumlimits_{d|ab}f(d)g(frac{ab}{d})\ 令d=d_1 imes d_2\ =sumlimits_{d_1d_2|ab}f(d_1d_2)g(frac{ab}{d_1d_2})\ =sumlimits_{d_1|a}f(d_1)g(frac{a}{d_1}) imes sumlimits_{d_2|d}f(d_2)g(frac{b}{d_2})\ =(f*g)(a) imes (f*g)(b) ]

线性筛(实际上是利用线性筛求积性函数的值)

唯一分解定理:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积

那么有

[mathbf{f}(n)=prodlimits_{i=1}^tmathbf{f}(p_i^{k_i}) ]

于是我们就有另一种方法表示积性函数,即给出它在素数幂处的取值

当我们在线性筛的时候可以求出每个数的最小质因数(p_1),它的次数(k_1),那么

[mathbf{f}(n)=mathbf{f}(p_1^{k_1})mathbf{f}(frac{n}{p_1^{k_1}}) ]

由上面的结论可知:

[sigma_0(n)=prodlimits_{i=1}^t(k_i+1)\ phi(n)=prodlimits_{i=1}^tp_i^{k_i-1}(p_i-1)=nprodlimits_{i=1}^t(1-frac{1}{p_i}) ]

(下面的那个是不是有点熟悉?就是课本上欧拉函数的求法)

3.函数之间的加法和数乘

[(f+g)(n)=f(n)+g(n) \加法\(x imes f)(n)=x imes f(n),xepsilon C\ (c为常数) 数乘 ]

4.狄利克雷卷积(Dirichlet)

Dirichlet是个人,而且是一个很有名的人,今天我们不讲这个人,我们讲讲他的狄利克雷卷积

狄利克雷乘积(Dirichlet product)亦称狄利克雷卷积、卷积,是数论函数的重要运算之一。设f(n)、g(n)是两个数论函数,它们的Dirichlet(狄利克雷)乘积也是一个数论函数,简记为h(n)=f(n)*g(n)。---来自百度百科

[(f*g)=sumlimits_{ij=n}f(i)g(j)\或\(f*g)=sumlimits_{d|n}f(d)f(frac{n}{d}) ]

运算性质:满足交换律,结合律,分配律;

交换律 即

[(f*g)=(f*g)\ ]

[--------------\ 证明:\(f*g)(n)=sumlimits_{ij=n}f(i)g(j)=sumlimits_{ji=n}f(j)g(i)=(g*f)(n) ]

结合律:

[(f*g)*h=f*(g*h) ]

[证明:\ [((f*g)*h)](n)=sumlimits_{pq=n}[sumlimits_{ij=p}f(i)g(j)]h(q)\ =sumlimits_{i|n}f(i)(sumlimits_{jq=frac{n}{i}}g(j)h(q))\ =sumlimits_{i|n}f(i)(g*h)(frac{n}{i})\ =(f*(g*h))(n) ]

分配律:

[f*(g+h)=f*g+f*h ]

[证明:\ f*(g+h)=[f*(g+h)](n)\ =sumlimits_{d|n}f(d) imes[g(frac{n}{d})+h(frac{n}{d})]\ =sumlimits_{d|n}[f(d)g(frac{n}{d})+f(d)h(frac{n}{d})]\ =f*g+f*h ]

单位元

在狄利克雷卷积中存在一种像单位矩阵一样的"数",任何一个函数*这个"数"都会是其本身,我们把这个"数"叫做单位元,即前文所提到的单位函数

[epsilon(n)=egin{cases}1&n=1\ 0&n>1\ end{cases} ]

则有

[(f*epsilon)(n)=sumlimits_{d|n,d eq n}f(d)epsilon(frac{n}{d})+f(n)epsilon(1)\ =sumlimits_{d|n,d eq n}f(d) imes0+1\] =f(n) ]

所以任何一个数论函数与单位元的卷积为数论函数本身(后文有重要运用)

逆元

其实逆元的概念和倒数差不多,即:

方程 axequiv 1(mod, : p) 的解称为 a 关于模 p 的逆,当 gcd(a,p)=1(即 ap 互质)时,方程有唯一解,否则无解。

那么逆元可以用来干什么呢,比如说对于 (a/b), mod: p,并没有 ((a: mod: p)/(b: mod:p)), mod: p,但是直接除又会爆精度,这时我们就可以用到逆元,假设用 inv(b) 代表 imgb 的逆元,那么(a/b),mod:p=(a*inv(b)),mod:p。 ____引用自forever_dreams的博客

上面的是数的逆元,狄利克雷卷积也有逆元:

定义:

[对每个mathbf{f}(1) eq 0的函数mathbf f ,都存在一个函数mathbf{g}使得mathbf{f}*mathbf{g}=epsilon ]

则如何求一个函数的逆?

定义

[mathbf{g}(n)=frac{1}{mathbf{f}(1)}left([n=1]-sumlimits_{ij=n,i eq 1}mathbf{f}(i)mathbf{g}(j) ight) ]

[mathbf{f}*mathbf{g}(n)\ =sumlimits_{ij=n}mathbf{f}(i)mathbf{g}(j)\ =mathbf{f}(1)mathbf{g}(n)+sumlimits_{ij=n,i eq 1}mathbf{f}(i)mathbf{g}(j)\=[n=1]=epsilon(i) ]

把积性函数和逆元联系起来得到 积性函数的逆元一定也是积性函数.

留与读者自证之/笑哭.(注,积性函数一定满足 f ( 1 ) = 1 )

莫比乌斯反演

[我们定义1的逆是 mu.\ 这样的话,如果g=f*1,就有f=f*1*mu=g*mu,\ 换句话说,如果 mathbf g(n)=sum_{dmid n}mathbf f(d) \就有 mathbf f(n)=sum_{dmid n}muleft(frac nd ight)mathbf g(d) ]

[引理 \mu*1=epsilon\ 即 sumlimits_{d|n}mu(d)=epsilon(n)\其中的"1"是一个返回值为1的常数函数 ]

证明:

[设n有k个不同的质因子 \n=p_1 imes p_2 imes ... imes p_k\ 记一个函数q(s)为序列mathbf{s}中所有元素的乘积\ mathbf{s}={{x_1,x_2...x_k}};s序列长度为K \令一个mathbf{f}(s)的约数d=mathbf{f}(j) \jsubseteq s, j序列长度为J\ herefore sumlimits_{d|n}mu(d)=sumlimits_{mathbf{J}=0}^kmu(f(j)) imes (从K中取J个值(组合数))\ 令i=J,则原式=sumlimits_{i=0}^kmu(d)^i(k中取i的组合)\ 根据二项式定理,奇数项与偶数项和为0. 所以sumlimits_{d|n}mu(n) = egin{cases} 1&n=1 \ 0&n>1\ end{cases}=epsilon(n) ]

求解μ

[如何求mu ?由于1是积性的,所以1的逆mu也是积性的,则 ]

[mu(p^k)egin{cases}1,&k=0\-1,&k=1\0,&k>1end{cases} ]

[mu(x)=egin{cases} 1,&x=1\ (-1)^n, &x=prodlimits_{i=1}^np_i\ 0,&其余情况 end{cases} ]

[求mu的函数 ]

void get_mu(int n)
{
    mu[1] = 1;
    for(int i = 2;i <= n; i++)
    {
        if(!vis[i])
		{
			pri[++cnt] = i;
			mu[i] = -1;
		}
        for(int j = 1; j <= cnt && pri[j] * i <= n; j++)
        {
            vis[pri[j] * i] = 1;
            if(i % pri[j] == 0) break;
            else mu[i * pri[j]] = -mu[i];
        }
    }
 }

这样就证明了上述结论。

当然还有另一个方向的莫比乌斯反演(这个大概更常用)

[mathbf{g}(n)=sumlimits_{n|d}mathbf{f}(d)iff mathbf{f}(n)=sumlimits_{n|d}mu(frac{d}{n})mathbf{g}(d) ]

[对此只需要定义 (mathbf foplusmathbf g)(x)=sum_{xmid y}mathbf f(y/x)mathbf g(y)=sumlimits_{x|Y}f(y/x)g(y) ,并容易证明 (mathbf fastmathbf g)oplusmathbf h=mathbf foplus(mathbf goplusmathbf h)。\于是 mathbf f=(muastmathbf1)oplusmathbf f=muoplus(mathbf1oplusmathbf f)=muoplusmathbf g ]

莫比乌斯反演是一个很重要的数论知识,在做数论题的时候很有帮助,为了提高对于莫比乌斯反演的理解和掌握

建议去看看以下几道题

YY的GCD

约数个数和

如果你看完了一遍,对于知识点还是没有理解的话,建议重新看一遍,或者去以下的博客那里看一看,

本人就是从那里学习的

铃悬的小知识

原文地址:https://www.cnblogs.com/--840-114/p/13304689.html