算法讲解
(本篇文章假设您学过莫比乌斯反演 (〃‘▽’〃)
我们知道莫比乌斯函数有一个性质: ∑ d ∣ n μ ( d ) = [ n = 1 ] \sum\limits_{d|n} \mu(d)=[n=1] d∣n∑μ(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) x∣n∑f(n)。
考虑 ∑ i = 1 n μ ( i ) F ( i ) \sum\limits_{i=1}^{n} \mu(i)F(i) i=1∑nμ(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=1∑ni∣j∑μ(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)

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

被折叠的 条评论
为什么被折叠?



