首页 > 其他分享 >莫比乌斯函数入门

莫比乌斯函数入门

时间:2023-07-04 21:11:58浏览次数:41  
标签:lfloor frac 入门 乌斯 sum rfloor mu leq 莫比

莫比乌斯函数入门

之前遇到过很多次莫反的题,但是每次做完就忘了,云里雾里,所以写一篇来好好记忆一下,下次再忘了就回来看看。
内容和OIWIKI有很大部分的重叠,但是更偏向结论和做法,同时舍弃了一些看不懂的。

莫比乌斯函数定义:

\[\mu(n)=\begin{cases} 1 & n=1 \\ 0 & n含有平方因子(因子中有平方数) \\ (-1)^k & k为n本质不同的质因子个数 \end{cases} \]

性质

\(\mu(n)\)是积性函数

积性函数

\[设函数为f(ab),则f(ab) = f(a)\times f(b),且a⊥b(a,b互质) \]

性质

\[\sum_{d|n}\mu(d)=\begin{cases} 1 & n=1 \\ 0 & n\ne 1 \\ \end{cases} \]

\(n\)所有的因子的函数和的性质

证明

\[n = \prod_{i=1}^{i\leq k}p_i^{c_i},n' = \prod_{i=1}^{i\leq k}p_i \]

\[\sum_{d|n}\mu(d) = \sum_{d|n'}\mu(d) \]

解释
容易发现\(n'\)的所有\(d\),\(n\)是都有的,发现

\[d_i = \prod_{p_i\in P}p_i \]

证明,若

\[d_i\times p_l = \prod_{p_i \in P}p_i \times p_l \]

若\(p_l\)出现在\(P\)之中,则\(\mu(d_i\times P-l)=0\)
若\(p_l\)不出现在\(P\)之中,\(\mu(d_i\times P-l)\)会在其它情况中被枚举
所以第一个式子是成立的,再者

\[\sum_{d|n'}\mu(d) = \sum_{i=0}^{k}C_k^i(-1)^i \]

根据二项式定理

\[(a+b)^n = \sum_{i=0}^{n}C_n^ia^ib^{n-i} \]

为上面的式子添加一个\(b=1\)得

\[\sum_{i=0}^{k}C_k^i(-1)^i = (1+(-1))^k = 0 \]

\[\sum_{d|n}\mu(d)=\begin{cases} 1 & n=1 \\ 0 & n\ne 1 \\ \end{cases} \]

利用

因为\(\mu\)是积性函数,所以可以线性筛

void getMu() {
  mu[1] = 1;//初始化
  for (int i = 2; i <= n; ++i) {
    if (!flg[i]) p[++tot] = i, mu[i] = -1;//质数的情况
    for (int j = 1; j <= tot && i * p[j] <= n; ++j) {
      flg[i * p[j]] = 1;
      if (i % p[j] == 0) {
        mu[i * p[j]] = 0;
        break;
      }
      mu[i * p[j]] = -mu[i];//多一个质因数
    }
  }
}

补充结论

\[[gcd(i,hj)=1]=\sum_{d|gcd(i,j)}\mu(d) \]

人话翻译:左边成立,右边为\(1\),反之为\(0\)
证明:略

\[\varphi(x) = \sum_{d|x} d\mu(\frac{n}{d}) \]

莫比乌斯反演

\[f(x) = \sum_{d|x}g(d) \Longleftrightarrow g(x) = \sum_{d|x} \mu(\frac{x}{d})f(d) \]

\[f(x) = \sum_{d|x}g(d) \Longleftrightarrow g(x) = \sum_{d|x} \mu(d)f(\frac{x}{d}) \]

这两条就是莫比乌斯反演的结论。

例题

P2522 [HAOI2011] Problem b

原问题相当于询问一个矩阵,用类似于二维前缀和的方式将其拆开,每一部分都是形如:

\[\sum_{i=1}^{i\leq n}\sum_{j=1}^{j \leq m} [gcd(i,j)==k] \]

的样子,可以化简为:

\[\sum_{i=1}^{i\leq \lfloor \frac{n}{k} \rfloor}\sum_{j=1}^{j \leq \lfloor \frac{m}{k} \rfloor } [gcd(i,j)==1] \]

由之前的结论可得:

\[\sum_{i=1}^{i\leq \lfloor \frac{n}{k} \rfloor}\sum_{j=1}^{j \leq\lfloor \frac{n}{k} \rfloor} \sum_{d|gcd(i,j)} \mu(d) \]

我们枚举 \(d\),再枚举 \(d\) 的倍数 ,可得:

\[\sum_{d=1} \mu(d) \sum_{i=1}^{i\leq \lfloor \frac{n}{k} \rfloor}[d|i]\sum_{j=1}^{j \leq \lfloor \frac{n}{k} \rfloor}[d|j] \]

后面两部分都可以快速的算出,再得:

\[\sum_{d=1} \mu(d) \lfloor \frac{n}{kd} \rfloor \lfloor \frac{m}{kd} \rfloor \]

容易发现现在已经可以 \(O(n)\) 解决单次问题了,但是由多组询问,我们预处理 \(\mu\) 前缀和并使用数论分块优化。 code

..

后面有时间了再更,就当入个门

标签:lfloor,frac,入门,乌斯,sum,rfloor,mu,leq,莫比
From: https://www.cnblogs.com/snow-panther/p/17527007.html

相关文章

  • Google Guice 入门教程01 - 依赖注入
    1.依赖注入1.1类依赖注入所谓的绑定就是将一个接口绑定到具体的类中,这样客户端不用关心具体的实现,而只需要获取相应的接口完成其服务即可。HelloWorld.java 1publicinterfaceHelloWorld{23StringsayHello();4}5然后是具体的实现,HelloWorldImpl.j......
  • CANoe入门——键盘事件和系统变量事件
    需求:将VT的Channel全部打开和关闭实现方式:1.键盘事件实现,在CANoe工程执行后,通过按键控制VT上Channel的断开和闭合2.系统变量事件实现,创建系统变量与Button关联,设置系统环境变量,通过两个按钮控制断开和连接(按钮关联的系统变量未定义会有默认值,按下按钮也会改变,因此会......
  • 应用构建工作流入门
    1首先创建一个应用 2 创建一个业务对象,勾选同时生成实体; 然后进行编辑实体,点击保存并发布; 3进入页面建模,去新建页面;  4新建流程  双击活动,然后简单设置一个发起人为本人,即发起人是本人,审批也是本人;这样方便演示,点击保存并发布;这样就可以演示一个简......
  • 应用构建工作流入门
    1首先创建一个应用2 创建一个业务对象,勾选同时生成实体;然后进行编辑实体,点击保存并发布;3进入页面建模,去新建页面;4新建流程双击活动,然后简单设置一个发起人为本人,即发起人是本人,审批也是本人;这样方便演示,点击保存并发布;这样就可以演示一个简单的提交和审批;然后进入页面建模,创建......
  • 数列分块入门
    1.数列分块入门1区间修改,单点查询点击查看代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintMAXN=5e4+5;intn,len,cnt;inta[MAXN],tag[MAXN];intpos[MAXN],l[MAXN],r[MAXN];inlinevoidadd(intx,inty,intk){if(x>y)retu......
  • (转)Rancher 2.6 安装部署及入门示例
    原文:https://blog.csdn.net/weixin_41636021/article/details/1279767120.Rancher2.X简介Rancher是为使用容器的公司打造的容器管理平台。Rancher简化了使用Kubernetes的流程,开发者可以随处运行Kubernetes(RunKubernetesEverywhere),满足IT需求规范,赋能DevOps团队。ra......
  • 【Netty】「萌新入门」(三)ChannelFuture 与 CloseFuture
    前言本篇博文是《从0到1学习Netty》中入门系列的第三篇博文,主要内容是介绍Netty中ChannelFuture与CloseFuture的使用,解决连接问题与关闭问题,往期系列文章请访问博主的Netty专栏,博文中的所有代码全部收集在博主的GitHub仓库中;连接问题与ChannelFuture在Netty中,所有的......
  • Element-快速入门
     <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><divid="app"><div><el-button>默认按钮......
  • rust入门(一)
    1、安装Rust无论使用何种系统,均可以根据Rust官方网站提供的rustup-init工具完成Rust的安装.rustup-init下载地址:  https://www.rust-lang.org/zh-CN/tools/install根据系统提示进行安装,安装完成后,验证是否安装成功rustc--version提示:如果你使用的是Linux......
  • kernel pwn入门
    LinuxKernel介绍Linux内核是Linux操作系统的核心组件,它提供了操作系统的基本功能和服务。它是一个开源软件,由LinusTorvalds在1991年开始开发,并得到了全球广泛的贡献和支持。Linux内核的主要功能包括进程管理、内存管理、文件系统、网络通信、设备驱动程序等。它负责管理......