【OI之路】11更高级数论-2莫比乌斯反演
来源:互联网 发布:postgresql mysql 电商 编辑:程序博客网 时间:2024/05/17 23:41
前方高能!
较优质而乱七八糟的文章:
http://blog.csdn.net/acdreamers/article/details/8542292
http://blog.csdn.net/herodeathes/article/details/78602577
http://blog.csdn.net/lixuepeng_001/article/details/50577932
莫比乌斯反演,需要使用到一个名为莫比乌斯函数的东东
即所谓
μ 函数的运用
我们先不解释
例题:GCD-莫比乌斯1
求数对(x,y)满足
并且(1,2)和(2,1)算一对
解:
先简化问题为
为方便表示设n=b/k,m=d/k
设f(t)为满足gcd(x,y)=t的对数,
其中
由于直接求f(t)较困难,考虑另一个函数
F(d)为满足gcd(x,y)%d=0的对数,
其中
又因为两个数的最大公约数不可能超过任何一个数,
所以
易知
算了还是证明一下这个“易知”吧
x可以是
y也可以是
所以就是
所以,F(d)可以轻松地算出,接下来就是要从F(d)反演出f(t)
他们有如下关系(属于“倍数”类,另一种是约数类)
通过莫比乌斯反演的倍数版公式转化为
(原理是运用容斥,具体证明一会再讲)
G(a,b)为当n=a,m=b时的f(1)
这道题的最后答案就是G(n,m)-G(n,n)/2 (假设n<=m)
原因可以看这幅图(转载):
也就是右边的公共部分只能取一半,所以减去另外不需要的一半。
μ 函数的计算和证明
显然,
为了与刚才的题目运用的公式不同从而让读者有更广泛的认知以及便于证明
约数版公式:
额
U有一下性质(有原因,一会再解释):
U[x] = 1 当且仅当x能够分解成偶数个不同质数的乘积(其中1不能被分解,所以1的分解出的质数个数是0,所以U[1]=1)
U[x] = -1 当且仅当x能够分解成奇数个不同质数的乘积
U[x] = 0 除开(2),(3)的其他情况
看上面关于U的定义可能有点看晕了,通俗一点的说
对于一个 x ,分解因式过后有 x=(p1^e1)(p2^e2)…(pr^er)
来几个例子
U[1]=1; 定义
U[2]=-1;分解式
U[6]=1; 分解式
U[9]=0; 分解式
U[12]=0;分解式
设H(a,b)是计算f(b)时F(a)的系数
然后从例子中找规律
举例子自己推算,
可以发现
于是我们把H的第一个元素略去,简写为H(x)
加下来就是U的计算了
首先需要明确2点!
一是 F(x)中,一定包含一个f(1),因为 1|x
二是 f(1)=F(1)
接下来从多种角度尝试,具体推算过程就略过了
(0).如果 x==1 因为 f(1)=F(1) 所以 U(1)=1
(1).假设 x 是一个 质数 ,易知 U(x)=-1
(2).假设 x 可以写成2个不同质数的乘积
(3).假设 x 可以写成3个不同质数的乘积
(4).假设 x 可以写成r个不同质数的乘积,易知
(5).假设 x 可以写成一个质数的平方
(6).假设 x 可以写成一个质数的次幂
总而言之,U的求法也就是
可以用线性筛素数来预处理出莫比乌斯函数
(据说莫比乌斯函数在任何题目都不会变,变化的只是F(x)和f(x)的定义
公式
倍数和公式
约数和公式
例题
GCD-莫比乌斯2
Problem_b-莫比乌斯3
仪仗队
Ideal Puzzle Bobble
- 【OI之路】11更高级数论-2莫比乌斯反演
- 【OI之路】11更高级数论-3快速傅里叶变换
- HDU1695 GCD 数论之 莫比乌斯反演
- 【BZOJ2301】problem b,数论之莫比乌斯反演
- 数论 莫比乌斯反演
- 【数论】(莫比乌斯反演)关于莫比乌斯反演的小结
- [hdu 5072]Coprime 数论-莫比乌斯反演
- Hdoj 5212 Code 【数论】【莫比乌斯 反演】
- BZOJ 4176 Lucas的数论 莫比乌斯反演
- bzoj3994 约数个数和 数论&莫比乌斯反演
- 【莫比乌斯反演】【数论】[ZBOJ 2693]jzptab
- BZOJ_P2820 YY的GCD(数论+莫比乌斯反演)
- 约数个数和(数论,莫比乌斯反演)BZOJ3994
- BZOJ_P2671 Calc(数论+莫比乌斯反演)
- 【BZOJ3601】一个人的数论,莫比乌斯反演+高斯消元
- bzoj 4176 Lucas的数论 莫比乌斯反演
- bzoj3601 一个人的数论 莫比乌斯反演+高斯消元
- codeforces839D Winter is here 数论,莫比乌斯反演
- Linux作业
- java反射学习笔记(3)----使用反射来调用方法
- 数字图像处理-离散傅里叶变换(opencv3+C++显示)
- 如何避免产品设计中的「生造方案」和「重新发明轮子」
- android系统启动流程
- 【OI之路】11更高级数论-2莫比乌斯反演
- linux分区的基本方案
- 产品设计过程中,异常流程设计的那些事儿
- 实验吧-你真的会PHP吗?writeup
- java多线程详细基础概念
- SQL语法学习记录
- 聊聊全链路设计和传统设计的流程差异
- 最长上升子序列——O (nlogn)算法原因解析!为什么这样可以求出来!(附带动态规划dp + 二分查找讲解)
- tensorflow小白---Operation was explicitly assigned to /device:GPU:1 but available devices are [ /job:l