史上最(不)详细的莫比乌斯反演学习记录

本文详述了莫比乌斯函数的概念,包括其定义和性质,并通过实例解析了莫比乌斯反演的公式及其证明。文章介绍了如何使用莫比乌斯反演解决数学和算法问题,涉及数论、欧几里得算法和小学奥数知识。通过实例展示了如何将理论应用于解决竞赛编程中的板子题,如POI2007 ZAP-Queries和简单的数学题,以及优化计算复杂度的方法。
摘要由CSDN通过智能技术生成

由于楼主是个小蒟蒻,所以理解的很慢,所以就很详细
然后学习的时候看了很多大佬的博客,yyb,wfy…还有一堆不认识的emmm,wzw巨佬的讲解,然后终于理解了那么一点,就来记录一下
(表示打这么多公式是真的累…)
公式打的比较多,如果有那些地方写错了希望各位大佬能指出,我一定及时的改正
至于代码…码风应该还不错吧(至少我觉得还是很好看的
因为我正在慢慢学,所以也就在慢慢更新(速度应该还凑合,但毕竟天天考试时间也不算太多)
在前面的题目中证明需要用到的一些玄学小学奥数的东西的证明写在了最后(因为放在前面好难排版捂脸



莫比乌斯函数简介

首先先介绍一下什么是莫比乌斯函数

(转自百度百科)

莫比乌斯函数是一个数论函数,它同时也是一个积性函数(μ(ab) =μ(a)μ(b), a,b互质)
当n不等于1时,n所有因子的莫比乌斯函数值的和为0

也就是说
∑ d ∣ n μ ( d ) = { 1 n=1 0 n>1 \sum_{d|n}\mu(d)= \begin{cases} 1& \text{n=1}\\ 0& \text{n>1} \end{cases} dnμ(d)={ 10n=1n>1

莫比乌斯函数完整定义的通俗表达:
1)莫比乌斯函数μ(n)的定义域是N
2)μ(1)=1
3)当n存在平方因子时,μ(n)=0
4)当n是素数或奇数个不同素数之积时,μ(n)=-1
5)当n是偶数个不同素数之积时,μ(n)=1

μ ( n ) = { 1 n=0 ( − 1 ) k n= p1*p2*p3...pk 0 其他 \mu(n)= \begin{cases} 1& \text{n=0}\\ (-1)^k& \text{n= p1*p2*p3...pk}\\ 0& \text{其他} \end{cases} μ(n)=1(1)k0n=0n= p1*p2*p3...pk其他


其实上面的都没有什么特别大的用处

莫比乌斯反演的公式

接着我们看莫比乌斯反演

设 g ( n ) = ∑ d ∣ n f ( d ) 设 g(n)=\sum_{d|n}f(d) g(n)=dnf(d)

⇕ \Updownarrow

f ( n ) = ∑ d ∣ n μ ( d ) g ( n d ) f(n)=\sum_{d|n}\mu(d)g\left(\frac{n}{d}\right) f(n)=dnμ(d)g(dn)
g ( n ) = ∑ n ∣ d f ( d ) g(n)=\sum_{n|d}f(d) g(n)=ndf(d)

⇕ \Updownarrow

f ( n ) = ∑ n ∣ d g ( d ) μ ( d n ) f(n)=\sum_{n|d}g(d)\mu\left(\frac{d}{n}\right) f(n)=ndg(d)μ(nd)
( 注 意 这 个 d 一 般 就 是 f 的 定 义 域 或 者 说 是 “ 函 数 值 有 效 ” 的 定 义 域 ) (注意这个 d 一般就是 f 的定义域或者说是“函数值有效”的定义域) df

表示这两个式子的整除来整除去让我这个没学过小学奥数的小蒟蒻看的头都是大的,天天搞不清楚谁整除谁…
有了上面的式子的恒等互换似乎依旧没有什么用


板子题及证明

于是我们来看一下最基本的题目的证明

板子

求 ∑ i = 1 n ∑ j − 1 m [ g c d ( i , j ) = = 1 ] 求\sum_{i=1}^n\sum_{j-1}^m[gcd(i,j)==1] i=1nj1m[gcd(i,j)==1]
这 里 的 [ g c d ( i , j ) = = 1 ] 是 是 否 满 足 g c d 为 1 , 如 果 是 就 a n s + + 这里的[gcd(i,j)==1]是是否满足gcd为1,如果是就ans++ [gcd(i,j)==1]gcd1ans++

首 先 我 们 把 它 化 作 一 般 形 首先我们把它化作一般形
设 f ( x ) = ∑ i = 1 n ∑ j − 1 m [ g c d ( i , j ) = = x ] 设f(x)=\sum_{i=1}^n\sum_{j-1}^m[gcd(i,j)==x] f(x)=i=1nj1m[gcd(i,j)==x]

g ( n ) = ∑ n ∣ d f ( d ) g(n)=\sum_{n|d}f(d) g(n)=ndf(d)

⇕ \Updownarrow

f ( n ) = ∑ n ∣ d g ( d ) μ ( d n ) f(n)=\sum_{n|d}g(d)\mu\left(\frac{d}{n}\right) f(n)=ndg(d)μ(nd)
那 么 , 我 们 的 g ( n ) 是 什 么 呢 那么,我们的g(n)是什么呢 g(n)

直 接 按 照 定 义 把 它 带 进 去 , 可 以 化 出 这 么 一 个 式 子 直接按照定义把它带进去,可以化出这么一个式子
g ( x ) = ∑ i = 1 n ∑ j = 1 m [ x ∣ g c d ( i , j ) ] g(x)=\sum_{i=1}^n\sum_{j=1}^m[x|gcd(i,j)] g(x)=i=1nj=1m[xgcd(i,j)]

⇓ 把 x 提 出 来 \Downarrow 把x提出来 x

g ( x ) = ∑ i = 1 ⌊ n x ⌋ ∑ j = 1 ⌊ m x ⌋ [ 1 ∣ g c d ( i , j ) ] g(x)=\sum_{i=1}^{ {\lfloor\frac{n}{x}\rfloor}}\sum_{j=1}^{\lfloor\frac{m}{x}\rfloor}[1|gcd(i,j)] g(x)=i=1xnj=1xm[1gcd(i,j)]
这 个 时 候 , 由 于 所 有 的 g c d 肯 定 可 以 整 除 1 , 所 以 , 这 个 式 子 的 值 就 变 成 了 i , j 的 个 数 这个时候,由于所有的gcd肯定可以整除1,所以,这个式子的值就变成了i,j的个数 gcd1i,j
g ( x ) = ⌊ n x ⌋ ⌊ m x ⌋ g(x)=\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{x}\rfloor g(x)=xnxm
然 后 , 我 们 再 把 g ( x ) 带 回 原 来 的 式 子 里 面 , 可 以 得 到 然后,我们再把g(x)带回原来的式子里面,可以得到 g(x)
f ( x ) = ∑ x ∣ d g ( d ) μ ( d x ) = ∑ x ∣ d μ ( d x ) ⌊ n d ⌋ ⌊ m d ⌋ f(x)=\sum_{x|d}g(d)\mu\left(\frac{d}{x}\right)=\sum_{x|d}\mu\left(\frac{d}{x}\right)\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor f(x)=xdg(d)μ(xd)=xdμ(xd)dndm

f ( 1 ) = ∑ 1 ∣ d μ ( d 1 ) ⌊ n d ⌋ ⌊ m d ⌋ = ∑ d = 1 m i n ( n , m ) μ ( d ) ⌊ n d ⌋ ⌊ m d ⌋ f(1)=\sum_{1|d}\mu\left(\frac{d}{1}\right)\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor=\sum_{d=1}^{min(n,m)}\mu({d})\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor f(1)=1dμ(1d)dndm=d=1min(n,m)μ(d)dndm
A n s = ∑ d = 1 m i n ( n , m ) μ ( d ) ⌊ n d ⌋ ⌊ m d ⌋ Ans=\sum_{d=1}^{min(n,m)}\mu({d})\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor Ans=d=1min(n,m)μ(d)dndm
算 到 了 这 里 , 我 们 就 可 以 用 O ( n ) 来 快 速 的 求 了 算到了这里,我们就可以用O(n)来快速的求了 O(n)


接下来我们来看一下稍微的一点变式
求 ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = = d ] 求 \sum_{i=1}^n\sum_{j=1}^m [ gcd(i,j)==d ] i=1nj=1m[gcd(i,j)==d]
令 f ( x ) = ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = x ] 令 f(x)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=x] f(x)=i=1nj=1m[gcd(i,j)=x]

⇓ \Downarrow

g ( x ) = ∑ x ∣ d f ( d ) = ∑ i = 1 n ∑ j = 1 m [ x ∣ g c d ( i , j ) ] g(x)=\sum_{x|d}f(d)=\sum_{i=1}^n\sum_{j=1}^m[x|gcd(i,j)] g(x)=xdf(d)=i=1nj=1m[xgcd(i,j)]
∵ [ x ∣ g c d ( i , j ) ] \because[x|gcd(i,j)] [xgcd(i,j)]

∴ x ∣ i 且 x ∣ j \therefore x|i\text{且}x|j xixj
g ( x ) = ∑ i = 1 n ∑ j = 1 m [ x ∣ g c d ( i , j ) ] = ∑ i = 1 ⌊ n x ⌋ ∑ j = 1 ⌊ m x ⌋ = ⌊ n x ⌋ ⌊ m x ⌋ g(x)=\sum_{i=1}^n\sum_{j=1}^m[x|gcd(i,j)]=\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum_{j=1}^{\lfloor\frac{m} {x}\rfloor}=\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{x}\rfloor g(x)=i=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值