莫比乌斯容斥 笔记

本文详细介绍了莫比乌斯反演的算法讲解,通过CF题目实例解析了如何利用莫比乌斯函数解决求解n=1的方案数问题。文章涉及CF 439E、900D、1036F三道题目,通过转化问题和计算n的倍数方案和,应用莫比乌斯容斥公式,实现了高效求解。

博客观赏效果更佳:
cnblogs
github

算法讲解

(本篇文章假设您学过莫比乌斯反演 (〃‘▽’〃)

我们知道莫比乌斯函数有一个性质: ∑ d ∣ n μ ( d ) = [ n = 1 ] \sum\limits_{d|n} \mu(d)=[n=1] dnμ(d)=[n=1]

根据这条性质,我们写出一个类似筛的东西:一个数组,初始都是 0 0 0。 第 i i i 轮,将 i i i 的倍数都加上 μ ( i ) \mu(i) μ(i)

在这里插入图片描述

n n n 轮之后,显然只有第一个位置还剩一个 1 1 1,其它都变成了 0 0 0。好好理解下这个表,然后往下看。

那么,假设现在我们要求 n = 1 n=1 n=1 时的答案,但是我们方便求的只有 n n n 的倍数的答案和,如何转化捏 (⊙.⊙)

我们设 f ( x ) f(x) f(x) 表示 n n n 恰好为 x x x 的答案, F ( x ) F(x) F(x) 表示 n n n x x x 的倍数的答案和,即 ∑ x ∣ n f ( n ) \sum\limits_{x|n} f(n) xnf(n)

考虑 ∑ i = 1 n μ ( i ) F ( i ) \sum\limits_{i=1}^{n} \mu(i)F(i) i=1nμ(i)F(i)

= ∑ i = 1 n ∑ i ∣ j μ ( i ) f ( j ) =\sum\limits_{i=1}^{n}\sum\limits_{i|j} \mu(i)f(j) =i=1nijμ(i)f(j)

考虑每个 f ( i ) f(i) f(i) 被算了多少次,变为:

∑ j = 1 n f ( j ) ∑ i ∣ j μ ( i ) = ∑ j = 1 n f ( j ) [ j = 1 ] = f ( 1 ) \sum\limits_{j=1}^{n} f(j) \sum\limits_{i|j} \mu(i)=\sum\limits_{j=1}^{n} f(j) [j=1]=f(1)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值