zoukankan      html  css  js  c++  java
  • 学习总结-莫比乌斯反演

    (〇)前置知识

    1.数论的基础知识(关于质数,约数)

    2.二项式定理

    3.数论分块*

    4.积性函数*

    5.(Dirichlet)卷积*

    6.莫比乌斯函数*

    注:带"*"号的本文会具体阐述

    (一)数论分块

    引理1:

    [forall a,b,cin mathbb{Z},lfloor{dfrac{a}{bc}} floor=lfloor dfrac{lfloorfrac{a}{b} floor}{c} floor ]

    这个公式比较容易理解,不详细阐述了。

    略证一下:

    (dfrac{a}{b}=lfloordfrac{a}{b} floor+r(0leq r<1))

    (lfloordfrac{a}{bc} floor=lfloordfrac{a}{b}cdotdfrac{1}{c} floor=lfloordfrac{lfloorfrac{a}{b} floor}{c}+dfrac{r}{c} floor=lfloordfrac{lfloorfrac{a}{b} floor}{c} floor)

    引理2:

    [forall ninmathbb{N_+},|{ lfloordfrac{n}{d} floor|dinmathbb{N_+},dleq n}|leqlfloor 2 sqrt{n} floor ]

    这个引理描述了(lfloor dfrac{n}{d} floor)的解的集合大小不会超过(2sqrt{n})

    容易证明。

    由此,我们可以得到一个算法:数论分块

    先来看这样的一个问题:求(sumlimits_{i=1}^{n} lfloordfrac{n}{i} floor)

    如果我们枚举每个(i),那么显然时间复杂度是(Theta(n)),有没有更快的算法?

    根据引理2我们可以知道,对于所有(lfloordfrac{n}{i} floor),至多只有(2sqrt{n})个不同的解。

    直观感受一下:

    不难发现,(lfloordfrac{n}{i} floor)的值是一段一段的(在一个连续的区间内),而这个区间的右端点恰好是(lfloordfrac{n}{lfloorfrac{n}{i} floor} floor)的值。

    证明略。代码如下:

    for(int l = 1, r; l <= n; l = r+1){
    	r = n/(n/l);
    	f(l, r);
    }
    

    [拓展]二维数论分块

    什么是二维数论分块?

    举个例子,如果我们要在求(lfloordfrac{n}{i} floor)的同时求出(lfloordfrac{m}{i} floor),这时就需要用到二维数论分块。

    代码实现很简单只需要加上一行:

    for(int l=1, r; l <= min(n, m); l = r+1){
    	r = min(n/(n/l), m/(m/l));
    	f(l, r);
    }
    

    (二)积性函数

    定义

    若函数(f(n))满足(f(1)=1)(forall x,yin mathbb{N_+},gcd(x,y)=1)都有(f(xy)=f(x)f(y)),则(f(n))积性函数

    若函数(f(n))满足(f(1)=1)(forall x,yinmathbb{N_+})都有(f(xy)=f(x)f(y)),则(f(x))完全积性函数

    性质

    (f(x))(g(x))均为积性函数,则以下函数也为积性函数。

    [h(x)=f(x^p) ]

    [h(x)=f^p(x) ]

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

    [h(x)=sumlimits_{d|x}f(d)g(dfrac{x}{d}) ]

    (x= prod p_{i}^{k_i})其中(p_i)是质数

    (F(x))为积性函数,则有(F(x)=prod F(p_i^{k_i}))

    (F(x))为完全积性函数,则有(F(x)=prod F(p_i)^{k_i})

    举例

    单位函数:(varepsilon=[n=1])(完全积性函数)

    恒等函数:(operatorname{id}_k(n)=n^k)其中(operatorname{id}_1(n))简记作(operatorname{id}(n))(完全积性函数)

    常数函数:(operatorname{1}(n)=1)(完全积性函数)

    除数函数:(sigma_k(n)=sumlimits_{d|n}d^k)(积性函数)

    欧拉函数:(varphi(n)=sumlimits_{i=1}^{n}[gcd(i,n)=1])(积性函数)

    (三)(Dirichlet)卷积

    又称“狄利克雷卷积”。

    定义

    定义两个数论函数(f,g)(Dirichlet)卷积为:

    [(f*g)(n)=sumlimits_{d|n} f(d)g(dfrac{n}{d}) ]

    性质

    (Dirichlet)卷积满足一下运算规律:

    1.交换律:(f*g=g*f)

    2.结合律:((f*g)*h=f*(g*h))

    3.分配律:(f*(g+h)=f*g+f*h)

    4.(f*varepsilon=f)其中(varepsilon)(Dirichlet)卷积的单位元

    例子(公式)

    [varepsilon=mu*1iff varepsilon(n)=sum limits_{d|n}mu(d) ]

    [d=1*1iff d(n)=sumlimits_{d|n}1 ]

    [sigma = operatorname{id}*1iff sigma(n)=sumlimits_{d|n}d ]

    [varphi=mu*operatorname{id}iff varphi (n)=sumlimits_{d|n}dcdotmu(dfrac{n}{d}) ]

    (四)莫比乌斯函数

    定义

    (mu)为莫比乌斯函数,定义为

    [mu(n)=egin{cases}1&n=1\0&exists p>1:p^2|n\(-1)^{omega(n)}&otherwiseend{cases} ]

    其中(omega(n))表示(n)的本质不同质因子个数,它也是一个积性函数。

    性质(敲黑板)

    除了积性函数的性质以外,莫比乌斯函数还有如下性质

    [sumlimits_{d|n}mu(d)=egin{cases}1&n=1\0&n ot=1end{cases} ]

    [sumlimits_{d|n}mu(d)=varepsilon(n),mu*1=varepsilon ]

    证明:

    (n=prodlimits_{i=1}^{k}p_i^{c_i},n'=prodlimits_{i=1}^kp_i)

    那么(sumlimits_{d|n}^kmu(d)=sumlimits_{d|n'}^kmu(d))

    (解释:因为由莫比乌斯函数的定义可知,当(c_i>1)时,(mu(p^{c_i})=0))

    (sumlimits_{d|n'}=mu(d)=sumlimits_{i=0}^kC_k^icdot(-1)^i)

    (解释:因为(n')的因子全是由质数(p_i)组成的,所以在(n')(k)个质因子中选出(i)个可以组合成(n')的所有因子,然后根据选出的质因子个数判断符号是正是负)

    ((ps):到了这一步有没有发现很像某个定理)

    根据二项式定理:

    [(a+b)^n=sumlimits_{i=0}^ndbinom{k}{i}a^{n-i}b^i ]

    得:

    (sumlimits_{i=0}^{k}C^i_kcdot(-1)^i=sumlimits_{i=0}^{k}dbinom{k}{i} imes1^{n-i} imes(-1)^i=(1-1)^k=0^k)

    该式子的值在(k=0)时即(n=1)时值为(1),否则为(0)。所以,

    (sumlimits_{d|1}^nmu(d)=[n=1]=varepsilon(n),mu*1=varepsilon)

    线性筛

    问题来了,知道了性质,如何求莫比乌斯函数?

    使用线性筛。线性筛基本可以求所有的积性函数,莫比乌斯函数也在其中。

    代码:

    	mu[1] = 1;
    	for(int i=2; i<=N; i++){
    		if(!vis[i]) prime[++cnt] = i, mu[i] = -1;//找出素数,素数的莫比乌斯函数值为-1 
    		for(int j=1; j<=cnt and i*prime[j] <= N; j++){
    			vis[i*prime[j]] = true;//标记以当前素数为最小质因子的合数 
    			if(i%prime[j] == 0){
    				mu[i*prime[j]] = 0;//如果该合数由两个相同的质因子,莫比乌斯函数值为0 
    				break;
    			}
    			mu[i*prime[j]] = -mu[i]; 
    		}
    	}
    

    (五)莫比乌斯反演

    (f(n),g(n))为两个数论函数,

    如果有(f(n)=sumlimits_{d|n}g(d)),那么有(g(n)=sumlimits_{d|n}mu(d)cdot f(dfrac{n}{d}))

    如果有(f(n)=sumlimits_{n|d}g(d)),那么有(g(n) = sumlimits_{d|n}mu(dfrac{d}{n})cdot f(d))

    换一种更加简洁的写法,狄利克雷卷积:

    (f=g*1iff f*mu=g)

    另外几个常用公式

    (varepsilon=mu*1iff [x=1]=sumlimits_{d|n}mu(d))

    (varphi*1=operatorname{id}iff varphi=operatorname{id}*mu)

    好了,公式看了这么多,来做几组练习。

    练习(练习中设(Nleq M))

    1.求(sumlimits_{i=1}^Nsumlimits_{j=1}^{M}[gcd(i,j)=1])

    解:原式(=sumlimits_{i=1}^{N}sumlimits_{j=1}^{M}varepsilon(gcd(i,j))\=sumlimits_{i=1}^{N}sumlimits_{j=1}^{M}sumlimits_{d|(i,j)}mu(d)\=sumlimits_{d=1}^{N}mu(d)cdotsumlimits_{i=1}^{lfloorfrac{N}{d} floor}sumlimits_{j=1}^{lfloorfrac{M}{d} floor}1\=sumlimits_{d=1}^{N}mu(d)lfloordfrac{N}{d} floorlfloordfrac{M}{d} floor)

    2.求(sumlimits_{i=1}^{N}sumlimits_{j=1}^{M}[gcd(i,j)=k])

    解:原式(=sumlimits_{i=1}^{lfloorfrac{N}{k} floor}sumlimits_{j=1}^{lfloorfrac{M}{k} floor}[gcd(i,j)=1])

    然后用与练习1一样的方式求解即可。

    3.求(sumlimits_{i=1}^{N}sumlimits_{j=1}^{M}operatorname{lcm}(i,j))

    解:原式(=sumlimits_{i=1}^{N}sumlimits_{j=1}^{M}dfrac{ij}{gcd(i,j)}\=sumlimits_{d=1}^{N}sumlimits_{i=1}^{N}sumlimits_{j=1}^{M}[gcd(i,j)=d]dfrac{ij}{d}\=sumlimits_{d=1}^{N}dsumlimits_{i=1}^{lfloorfrac{N}{d} floor}sumlimits_{j=1}^{lfloorfrac{M}{d} floor}ij[gcd(i,j)=1]\=sumlimits_{d=1}^{N}dsumlimits_{i=1}^{lfloorfrac{N}{d} floor}sumlimits_{j=1}^{lfloorfrac{M}{d} floor}ijsumlimits_{x|(i,j)}mu(x)\=sumlimits_{d=1}^{N}dsumlimits_{x=1}^{lfloorfrac{N}{d} floor}mu(x)x^2sumlimits_{i=1}^{lfloorfrac{N}{dx} floor}sumlimits_{j=1}^{lfloorfrac{M}{dx} floor}ij\=sumlimits_{d=1}^{N}dsumlimits_{x=1}^{lfloorfrac{N}{d} floor}mu(x)x^2dfrac{lfloorfrac{N}{dx} floor(lfloorfrac{N}{dx} floor+1)lfloorfrac{M}{dx} floor(lfloorfrac{M}{dx} floor+1)}{4})

    真不容易~

    留坑待补。

    参考资料OIWiki(https://oi-wiki.org/math/mobius/)

  • 相关阅读:
    H.264编码之DCT变换原理
    颜色空间转换
    jdbc 大数据存储 图片读取
    spring 事务配置
    Cglib代理
    jdk代理
    spring装配bean
    map 常用方法
    list map set常用方法之list
    calendar 类 用法
  • 原文地址:https://www.cnblogs.com/GDOI2018/p/13541520.html
Copyright © 2011-2022 走看看