『Möbius函数与Möbius反演』
<更新提示>
<第一次更新>
<正文>
Möbius函数
定义
设正整数\(n\)算数基本定理分解后为\(n=\prod_{i=1}^{k}p_i^{a_i}\),定义函数
\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)\)。
证明:
因数形式
\]
由于\(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'\),所以有
\]
倍数形式
设\(\frac{d}{n}=k\),则可以得到
\\=\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\),所以有
\]
应用
在某些题目中,若有某个函数\(f\)的值比较难求,但是其自变量倍数或约数的函数值求和\(F\)函数比较好求,可以先求出函数\(F\)的值,再利用\(Möbius\)定理,反演求出原函数的值。
<后记>
『Möbius函数与Möbius反演』的更多相关文章
- 『简单积性函数和dirichlet卷积』
简单积性函数 在学习欧拉函数的时候,相信读者对积性函数的概念已经有了一定的了解.接下来,我们将相信介绍几种简单的积性函数,以备\(dirichlet\)卷积的运用. 定义 数论函数:在数论上,对于定义 ...
- 『Python题库 - 填空题』151道Python笔试填空题
『Python题库 - 填空题』Python笔试填空题 part 1. Python语言概述和Python开发环境配置 part 2. Python语言基本语法元素(变量,基本数据类型, 基础运算) ...
- 『Python题库 - 简答题』 Python中的基本概念 (121道)
## 『Python题库 - 简答题』 Python中的基本概念 1. Python和Java.PHP.C.C#.C++等其他语言的对比? 2. 简述解释型和编译型编程语言? 3. 代码中要修改不可变 ...
- Jmeter之『如果(If)控制器』
判断方法 ${__jexl3("${projectName}"=="${targetDir}",)} ${__groovy("${projectNam ...
- 【luogu3768】简单的数学题 欧拉函数(欧拉反演)+杜教筛
题目描述 给出 $n$ 和 $p$ ,求 $(\sum\limits_{i=1}^n\sum\limits_{j=1}^nij\gcd(i,j))\mod p$ . $n\le 10^{10}$ . ...
- mongodb底层存储和索引原理——本质是文档数据库,无表设计,同时wiredTiger存储引擎支持文档级别的锁,MMAPv1引擎基于mmap,二级索引(二级是文档的存储位置信息『文件id + 文件内offset 』)
MongoDB是面向文档的数据库管理系统DBMS(显然mongodb不是oracle那样的RDBMS,而仅仅是DBMS). 想想一下MySQL中没有任何关系型数据库的表,而由JSON类型的对象组成数据 ...
- 『正睿OI 2019SC Day7』
简单数论 质因子分解 素性测试 素性测试指的是对一个正整数是否为质数的判定,一般来说,素性测试有两种算法: \(1.\) 试除法,直接尝试枚举因子,时间复杂度\(O(\sqrt n)\). \(2.\ ...
- 『Zap Möbius反演』
Zap Description FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a ,y<=b,并且gcd(x,y)=d.作为F ...
- 深入浅出ES6教程『async函数』
大家好,本人名叫苏日俪格,大家叫我 (格格) 就好,在上一章节中我们学到了Symbol & generator的用法,下面我们一起来继续学习async函数: async [ə'zɪŋk]:这个 ...
随机推荐
- Heap
#include using namespace std; int heap[100010],cnt=0; void put(int x) { cnt++; heap[cnt]=x; int now= ...
- html5 标签在 IE 下使用
(function(){if(!/*@cc_on!@*/0)return;var e = "abbr,article,aside,audio,bb,canvas,datagrid,datal ...
- Java构造器:级联调用,调用兄弟构造器
级联调用: class Father{ Father(){ System.out.println("Father birth"); } public void announce() ...
- java 字符串池【转】
java 字符串池 java运行环境有一个字符串池.比如String str="abc"时,会首先查看字符串池中是否存在字符串"abc",如果存在则直接将&qu ...
- 树莓派创建WiFi热点
将代码clone到本地 git clone https://github.com/oblique/create_ap cd create_ap make install 安装依赖的库 有些源中可能使用 ...
- Python_重写集合
class Set(object): def __init__(self,data=None): if data == None: self.__data = [] else: if not hasa ...
- redis的持久化之AOF
AOF Redis 分别提供了 RDB 和 AOF 两种持久化机制: RDB 将数据库的快照(snapshot)以二进制的方式保存到磁盘中. AOF 则以协议文本的方式,将所有对数据库进行过写入的命令 ...
- react 高阶组件的 理解和应用
高阶组件是什么东西 简单的理解是:一个包装了另一个基础组件的组件.(相对高阶组件来说,我习惯把被包装的组件称为基础组件) 注意:这里说的是包装,可以理解成包裹和组装: 具体的是高阶组件的两种形式吧: ...
- 实验效果展示(会声会影+FSCapture)
第一步,视频录制: 利用屏幕录制软件(Eg:FSCapture,可设定矩形区域)录制信号采集过程,存储. 第二步,视频叠加制作 1)导入视频 2)主轨,复叠轨视频安插&时序调整 3)两个视频图 ...
- PAT1127:ZigZagging on a Tree
1127. ZigZagging on a Tree (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...