莫比乌斯反演(入门)

细细算来,看反演已经有一两个星期了

刚开始的时候也是走了不少的弯路

和其他的算法一样,只要你懂了,就会有一种不过如此的感觉(误

感觉反演还是刚入门,不过还是先写一篇不完全的总结吧,不然过段时间就要忘记了

虽说看反演看了好久才懂,但是现在回头看看,其实很多时间还是花费在弯路上,真正的输出时间不过是最近的一两天

建议的前置技能:

容斥的简单应用

唯一分解定理

欧拉函数的定义

积性函数的定义

然后就可以看反演啦

反演推荐的资料还是贾志鹏线性筛

不要在电脑上直接过一遍就算看过了,这个资料上面有一些不加证明就给出的结论,最好能一个一个自己证明出来

弱在电脑上看了好久并没有看懂,然后打印出来一点一点啃下来

其实也不需要太久的时间,如果你中途不用去补前置知识点的话,一两天足以,重要的还是不要跳着看

现在感觉反演重要的是他的两种形式 ,即使看不懂,也最好能记下来

当初眼花看成一种形式的也是绕了好多弯路

形式一

如果有 f(n)=∑d|ng(d)

那么 g(n)=∑d|nμ(d)f(nd)


形式二

如果有 f(n)=∑n|dg(d)

那么 g(n)=∑n|dμ(dn)f(d)

还是讲一个题吧

计算:∑i=1N∑j=1Mgcd(i,j)k(mod(1e9+7))(N,M≤1e5,k≤10)

讲之前一些符号の约定

[bool]为逻辑格符号,即当方括号中间的式子成立的时候值为1,不成立的时候为0

比如 ∑i=1n[nmodi=0]就是n的约数的个数

∑d|nd就是对n的每一个约数求和

显然 ∑d|n1也是n的约数的个数

一个显然的正确做法就是一一的枚举所有的数对,然后一一算出gcd,然后一一的累加起来,时间复杂度是o(n*m)

虽然是正确的,但是会超时,因为N?M会达到1e10.

所以两两枚举是肯定不行的,这个时候你想起了gcd(a,b)是小于等于min(a,b)的,换句话说,gcd最大不会超过1e5

那么枚举gcd可不可以呢?看起来是可以的样子,让我们尝试一下

现在的问题转化为了对于每一个d (1≤d≤min(N,M)),我们要计算出有多少对i,j满足 gcd(i,j)=d

好像没有什么卵用。因为如果暴力算的话这里的复杂度还是o(n*m),再乘上一个d,用时比刚才纯暴力的方法还慢……..

(如果能够快速的求出gcd为d的数对的个数就好了,你不禁这样想道

先不要急,容我们回忆一下莫比乌斯反演的第二种形式

如果有 f(n)=∑n|dg(d)

那么 g(n)=∑n|dμ(dn)f(d)

再回忆一下我们要求的问题

(对于每一个 d(1≤d≤min(N,M)) ,计算出有多少对i,j满足 gcd(i,j)=d )

不妨设N≤M (这样的话min(N,M)就可以直接用N来代替惹)

如果我们设要求的东西为g(n)的话,即 g(n)=∑i=1N∑j=1m[gcd(i,j)=d]

那么f(n)是什么呢,根据定义,应该有 f(n)=∑n|dg(d)

你可能会想到可以设 f(n)=∑i=1n∑j=1m[gcd(i,j)modn=0]

那么f(n)应该是很好求的,就是?Nd???Md?

每次计算时间复杂度是多少呢?

对于每个 d(1≤d≤N),我们可以O(Nd)的计算出f(d)的值

那么总的复杂度呢?

∑d=1NNd≈Nlog(N)

诶,那么问题不就解决了吗

枚举所有可能d,用神奇的反演大法来计算出gcd恰好为d的数对的个数,然后就可以啦,时间复杂度是O(Nlog(N))也是可以接受的

反演这个东西怎么说呢,其实就是原来要求的东西不好求,于是我们去找一个新的好求的东西,并且惊讶的发现原来不好求的东西用新搞出来的东西也变得好求了起来



update 5.6

最近发现了一个很顺畅的莫比乌斯反演的证明,感觉很有必要记下来

数论函数 : 定义域为正整数的函数(以下的f,g,e,μ,u都为数论函数

定义卷积 : f°g=F , F(n)=∑pq=nf(p)g(q)

卷积存在单位元ι , f°ι=ι°f=f

不难得出 ι(x)=[x=1]

定义普通乘法: f×g=F , F(n)=f(n)g(n)

同样的普通乘法也存在单位元u , u×f=f×u=f

现在我们有两个运算了,要不要混合在一起玩玩呢?

记μ°u=ι

其实μ就是乘法单位元卷积意义下的逆元

然后我们来看看莫比乌斯反演的第一个公式说了什么

如果有 f(n)=∑d|ng(d)

那么 g(n)=∑d|nμ(d)f(nd)

第一个等式说的其实是f=g°u

第二个等式说的其实是g=f°μ

具体如何推下来的请等第三次更新

顺便给出一个求莫比乌斯函数的代码

memset(g,0,sizeof(g));
g[1] = 1;
for(int i=1;i<=n;i++){
    for(int j=i+i;j<=n;j+=i){
        g[j] -= g[i];
    }
}

这个代码的作用其实是求数论函数g和μ的卷积,当g是卷积单位元的时候,最后的结果自然是μ

如果g的初始化为乘法单位元的话,那么卷积出来的结果是卷积单位元

还是一个挺有趣的玩意

时间: 2024-08-29 15:44:58

莫比乌斯反演(入门)的相关文章

BZOJ 2301 莫比乌斯反演入门

2301: [HAOI2011]Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数n,接下来n行每行五个整数,分别表示a.b.c.d.k Output 共n行,每行一个整数表示满足要求的数对(x,y)的个数 Sample Input 2 2 5 1 5 1 1 5 1 5 2 Sample Output 14 3此题作为我的莫比

[知识点]莫比乌斯反演入门

因为今天有较为充足的时间,于是果断入坑反演OvO 直接上公式和概念: 定理:和是定义在非负整数集合上的两个函数,并且满足条件,那么我们得到结论 在上面的公式中有一个函数,称其为莫比乌斯函数 它的定义如下: (1)若,那么 (2)若,均为互异素数,那么 (3)其它情况下 对于函数,它有如下的常见性质: (1)对任意正整数有 (2)对任意正整数有 (3)为积性函数 数论上积性函数的定义:     积性函数的性质: ①  ②积性函数的前缀和也是积性函数 由此可以线性求出莫比乌斯函数: mu[1]=1;

莫比乌斯反演入门

Preface 莫比乌斯反演,数论中最令人头疼的一部分.可以把一些十分困难的问题变得依然很困难简单. 很早之前就想好好学一下反演,但苦于连\(\mu\)的意义都搞不懂.直到有一天我偶然看到了一句话: 那些各种各样的性质与定理,大多是前人几年甚至几十年才得出来的,哪里是你几天就能理解并证明的. (PS:每当你阅读本文并感到无法理解时,请再次阅读一遍上面的话.) 因此我就开始一脸懵逼地强行学习起反演了,一段时间之后发现也没有那么难理解. 学习的过程大多参照peng-ym's blog 关于莫比乌斯函

莫比乌斯反演入门解析

以下教程前半部分来自B站电子科技大学的视频 https://www.bilibili.com/video/av43470417?from=search&seid=9275043167445755699.菜鸡如我就还没看懂. 分割线后半部分教程来自 https://www.luogu.org/blog/An-Amazing-Blog/mu-bi-wu-si-fan-yan-ji-ge-ji-miao-di-dong-xi . 教程一 问题引入 给定整数 N 和 M .求满足 \(1 \leq x

hdu 1695 莫比乌斯反演

hdu 1695 莫比乌斯反演 题意: 给出a,b,c,d,k, 求满足a <= x <= b && c <= y <= d && gcd(x,y)=k 的数对(x,y)的对数. 限制: a=c=1; 0 < b,c <= 1e5; (n1,n2) 和 (n2,n1) 算为同种情况 思路: 其实是求满足1 <= x <= b/k && 1 <= y <= d/k && gcd(x,y

hdu1569 莫比乌斯反演

hdu 1695 莫比乌斯反演 给出a,b,c,d,k, 求满足a <= x <= b && c <= y <= d && gcd(x,y)=k 的数对(x,y)的对数. a=c=1; 0 < b,c <= 1e5; (n1,n2) 和 (n2,n1) 算为同种情况 其实是求满足1 <= x <= b/k && 1 <= y <= d/k && gcd(x,y)=1 的 数对(x,y

莫比乌斯反演题目列表

前言: 本题表中,凡是涉及\(n.m\),都默认\(n \leq m\). Part1 这些题目都非常水,莫比乌斯反演入门题, 主要是对莫比乌斯反演应用有一个基本概念. 1.[HAOI2011]Problem b (具体题目戳我) 题目:一组数据(\(a.d.c.d \leq 5×10^4\))求 \[\sum_{i=a}^{b} \sum_{j=c}^d [gcd(i,j)=d]\] 题解: \[\sum_{i=1}^{n} \sum_{j=1}^m [gcd(i,j)=d] = \sum_{

bzoj 2820 luogu 2257 yy的gcd (莫比乌斯反演)

题目大意:求$gcd(i,j)==k,i\in[1,n],j\in[1,m] ,k\in prime,n,m<=10^{7}$的有序数对个数,不超过10^{4}次询问 莫比乌斯反演入门题 为方便表述,由于n和m等价,以下内容均默认n<=m 题目让我们求:$\sum_{k=1}^{n}\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)==k]$ 容易变形为:$\sum_{k=1}^{n}\sum_{i=1}^{\left \lfloor \frac{n}{k} \righ

数论入门——莫比乌斯函数,欧拉函数,狄利克雷卷积,线性筛,莫比乌斯反演,杜教筛

一个菜鸡对数论的一点点理解... 莫比乌斯函数 定义函数\(\mu(n)\)为: 当n有平方因子时,\(\mu(n)=0\). 当n没有平方因子时,\(\mu(n)=(-1)^{\omega(n)}\),\(\omega(n)\)表示n不同质因子的个数. 性质1: \(\sum_{d|n}\mu(d)=[n=1]\) 证明:我们把n分解质因数,则原式\(=(-1+1)^{\omega(n)}=0\). 因为对于不同的质因子,只有选和不选两种方案,这是一个组合数相加的形式,偶数加奇数减,根据二项式