<更新提示>

<第一次更新>


<正文>

Möbius函数

定义

设正整数\(n\)算数基本定理分解后为\(n=\prod_{i=1}^{k}p_i^{a_i}\),定义函数

\[\mu(n)=
\begin{cases}
0\ \ (\exists\ i\in[1,k],a_i>1)
\\(-1)^k\ \ (\forall\ i\in[1,k],a_i=1)
\end{cases}
\]

称\(\mu(n)\)为\(Möbius\)函数。

即分解质因数后,若\(n\)有多个相同的质因子,则\(\mu(n)=0\)。当\(n\)的的质因子各不相同时,若\(n\)有偶数个质因子,则\(\mu(n)=1\),若\(n\)有奇数个质因子,则\(\mu(n)=-1\)。

求解

对于单个数字的\(Möbius\)函数,可以直接用试除法分解质因数求解,时间复杂度为\(O(\sqrt n)\)。若要求求解\(1-n\)的所有\(Möbius\)函数,则可以配合线性筛求解:

\(1.\) 对于线性筛找到的一个质数,显然\(\mu(n)=-1\)

\(2.\) 对于线性筛用最小质因子\(p_j\)筛掉一个合数时,由\(Möbius\)函数定义的第二部分可得\(\mu(i*p_j)=-\mu(i)\)

\(Code:\)

inline void sieve(void)
{
mui[1] = 1;
for (int i=2;i<=Uplim;i++)
{
if (!vis[i])Prime[++cnt] = i , mui[i] = -1;
for (int j=1;j<=cnt&&i*Prime[j]<=Uplim;j++)
{
vis[ i*Prime[j] ] = true;
if (i%Prime[j]==0)break;
mui[ i*Prime[j] ] = -mui[i];
}
}
}

性质

\(1.\) 对于任意正整数\(n\),若\(n=1\),则\(\sum_{d|n}\mu(d)=1\),若\(n>1\),则\(\sum_{d|n}\mu(d)=0\)。

证明:

当\(n=1\)时,\(\sum_{d|n}\mu(d)=1\)显然成立。

当\(n>1\)时,令\(n=\prod_{i=1}^kp_i^{a_i}\),则\(n\)的因数中\(\mu\)值不为\(0\)的必然是由若干个互不相同的质因子相乘得到的,其中质因子个数为\(r\)的有\(C_k^r\)个,那么显然有\(\sum_{d|n}\mu(d)=\sum_{i=0}^k(-1)^iC_k^i\),此式恰为二项式定理\((a+b)^n=\sum_{i=0}^nC_n^ia^ib^{n-i}\)中代入\(a=-1,b=1,n=k\)的情况,可知\(\sum_{d|n}\mu(d)=(-1+1)^k=0\)。

\(2.\) 对于任意正整数\(n\),有\(\sum_{d|n}\frac{\mu(d)}{d}=\frac{\phi(n)}{n}\)。

证明:

因为\(n=\sum_{d|n}\phi(d)\),令\(F(n)=n,f(n)=\phi(n)\),则由莫比乌斯定理可得\(\phi(n)=\sum_{d|n}\mu(d)F(\frac{n}{d})=\sum_{d|n}\mu(d)*\frac{n}{d}\),所以可得\(\sum_{d|n}\frac{\mu(d)}{d}=\frac{\phi(n)}{n}\)。

\(3.\) \(Möbius\)函数为积性函数,即对于互质正整数\(a,b\),有\(\mu(a*b)=\mu(a)*\mu(b)\)。

证明略。

Möbius反演

Möbius定理

首先,我们需要先了解\(Möbius\)反演的基础,\(Möbius\)定理。

\(Möbius\)定理:

\(1.\) 因数形式:若数论函数\(F,f\)满足\(F(n)=\sum_{d|n}f(d)\),则可以得到\(f(n)=\sum_{d|n}\mu(d)F(\frac{n}{d})\)。

\(2.\) 倍数形式:若数论函数\(F,f\)满足\(F(n)=\sum_{n|d}f(d)\),则可以得到\(f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d)\)。

证明:

因数形式

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

由于\(Möbius\)的性质\(1.\)可得\(\sum_{d|n}\mu(d)=1\)当且仅当\(n=1\),所以对于\(\sum_{d|\frac{n}{d'}}\mu(d)\)非\(0\),当且仅当\(\frac{n}{d'}=1\),即\(n=d'\),所以有

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

倍数形式

设\(\frac{d}{n}=k\),则可以得到

\[\sum_{n|d}\mu(\frac{d}{n})F(d)
\\=\sum_{k=1}^{+\infty}\mu(k)F(nk)=\sum_{k=1}^{+\infty}\mu(k)\sum_{nk|t}f(t)
\\=\sum_{n|t}f(t)\sum_{k|\frac{t}{n}}\mu(k)
\]

由于\(Möbius\)的性质\(1.\)可得\(\sum_{d|n}\mu(d)=1\)当且仅当\(n=1\),所以对于\(\sum_{k|\frac{t}{n}}\mu(k)\)非\(0\),当且仅当\(\frac{n}{t}=1\),即\(n=t\),所以有

\[\sum_{n|t}f(t)\sum_{k|\frac{t}{n}}\mu(k)=f(n)
\]

应用

在某些题目中,若有某个函数\(f\)的值比较难求,但是其自变量倍数或约数的函数值求和\(F\)函数比较好求,可以先求出函数\(F\)的值,再利用\(Möbius\)定理,反演求出原函数的值。


<后记>

『Möbius函数与Möbius反演』的更多相关文章

  1. 『简单积性函数和dirichlet卷积』

    简单积性函数 在学习欧拉函数的时候,相信读者对积性函数的概念已经有了一定的了解.接下来,我们将相信介绍几种简单的积性函数,以备\(dirichlet\)卷积的运用. 定义 数论函数:在数论上,对于定义 ...

  2. 『Python题库 - 填空题』151道Python笔试填空题

    『Python题库 - 填空题』Python笔试填空题 part 1. Python语言概述和Python开发环境配置 part 2. Python语言基本语法元素(变量,基本数据类型, 基础运算) ...

  3. 『Python题库 - 简答题』 Python中的基本概念 (121道)

    ## 『Python题库 - 简答题』 Python中的基本概念 1. Python和Java.PHP.C.C#.C++等其他语言的对比? 2. 简述解释型和编译型编程语言? 3. 代码中要修改不可变 ...

  4. Jmeter之『如果(If)控制器』

    判断方法 ${__jexl3("${projectName}"=="${targetDir}",)} ${__groovy("${projectNam ...

  5. 【luogu3768】简单的数学题 欧拉函数(欧拉反演)+杜教筛

    题目描述 给出 $n$ 和 $p$ ,求 $(\sum\limits_{i=1}^n\sum\limits_{j=1}^nij\gcd(i,j))\mod p$ . $n\le 10^{10}$ . ...

  6. mongodb底层存储和索引原理——本质是文档数据库,无表设计,同时wiredTiger存储引擎支持文档级别的锁,MMAPv1引擎基于mmap,二级索引(二级是文档的存储位置信息『文件id + 文件内offset 』)

    MongoDB是面向文档的数据库管理系统DBMS(显然mongodb不是oracle那样的RDBMS,而仅仅是DBMS). 想想一下MySQL中没有任何关系型数据库的表,而由JSON类型的对象组成数据 ...

  7. 『正睿OI 2019SC Day7』

    简单数论 质因子分解 素性测试 素性测试指的是对一个正整数是否为质数的判定,一般来说,素性测试有两种算法: \(1.\) 试除法,直接尝试枚举因子,时间复杂度\(O(\sqrt n)\). \(2.\ ...

  8. 『Zap Möbius反演』

    Zap Description FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a ,y<=b,并且gcd(x,y)=d.作为F ...

  9. 深入浅出ES6教程『async函数』

    大家好,本人名叫苏日俪格,大家叫我 (格格) 就好,在上一章节中我们学到了Symbol & generator的用法,下面我们一起来继续学习async函数: async [ə'zɪŋk]:这个 ...

随机推荐

  1. JavaScript打开新窗口被拦截问题

    新窗口打开页面,一个很常用的效果,至于代码,一般第一反应都是这么写: window.open(url); 但是主流的浏览器都会拦截这种效果(可能这些年弹窗广告太多,如果浏览器不拦截,用户受不了)   ...

  2. C#语言中的XmlSerializer类的XmlSerializer.Deserialize (Stream)方法举例详解

    包含由指定的 XML 文档反序列化 Stream. 命名空间:   System.Xml.Serialization程序集:  System.Xml(位于 System.Xml.dll) 注意: 反序 ...

  3. string to int

    problem describe: given a string , first find the first word which is not white space;then there wil ...

  4. .net core使用Ku.Core.Extensions.Layui实现layui表单渲染

    演示网站地址:http://layui.kulend.com/项目地址:https://github.com/kulend/Ku.Core.Extensions/tree/master/Ku.Core ...

  5. C# 数据库链接字符串加密工具

    有些项目尤其是WinForm或者是WPF项目,针对一些工具形式的小项目,不想软件流出去之后,懂程序的的拿到手之后一看配置文件就知道了我们数据库的用户名和密码,如果外网能访问的话,那就麻烦大了.所以这里 ...

  6. 谣传QQ被黑客DDOS攻击,那么Python如何实现呢?

    于2018-5-10日晚 网络流传黑客DDOS攻击了QQ服务器,导致大家聊天发送内容时出现感叹号.我们都知道一般情况下出现感叹号都是你的网络不稳定,或者...别人已经删除你了.然而昨晚很奇怪,发出的内 ...

  7. 三级菜单python写法(递归写法)

    数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, ...

  8. Java中static关键字和final关键字

    static: 1. 修饰变量,方法 表示静态方法,静态变量. 2. static修饰代码块 static{ } 此种形式为静态代码块,用于初始化同时被final static修饰的变量.(当然,更常 ...

  9. .net 弹出消息框后,页面样式变乱

    点击按钮,执行提交操作,弹出消息框后,页面的样式变乱,解决方法: 首先,确定使用的css样式正确,页面中的宽高值保持规范统一: 然后,弹出框避免使用Response.Write(),如下所示 Resp ...

  10. python爬虫入门(七)Scrapy框架之Spider类

    Spider类 Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取的动作 ...