莫比乌斯反演与杜教筛

以下内容均来自TA爷课件,我只是改了几个小的地方qwq

关于除法

  1. n i 只有 O ( n ) 种取值。
    2.对于 i n n i 是与i被n除并下取整取值相同的一段区间的右端点。
    3.一个很有用的性质: n a b = n a b = n b a
    上取整也有3所述的性质。

积性函数

f ( a b ) = f ( a ) f ( b ) , ( a , b ) = 1

完全积性:不要求 ( a , b ) = 1
考虑时一般会考虑成
f ( x ) = i f ( p i k i )

f 不是0的常值函数时, f ( 1 ) = 1
积性函数的狄利克雷前缀和也是积性函数 1
s ( n ) = d | n f ( d ) = i j = 0 k i f ( p j i )

两个积性函数的狄利克雷卷积也是积性函数。
c ( n ) = d | n a ( d ) b ( n d ) = i j = 0 k i a ( p i j ) b ( p i k i j )

积性函数可以线性筛出。线筛可以找到每个数 x 的最小质因子 p 1 及其次数 k 1 。如果我们能以较小的代价 O ( 1 ) 求出 f ( p 1 k 1 ) ,便可以线筛了。

初等积性函数 μ

栗子:给定 n m ,求 i = 1 n j = 1 m [ i j ] , n , m <= 10 9 ,不用 μ 怎么做?

容斥!设dp数组 f ( i , j ) 为当 n = i , m = j 时的答案。

f ( n , m ) = n m i = 2 min ( n , m ) f ( n i , m i )  

时间复杂度 O ( i = 1 n ( n i + i ) ) = O ( n 3 4 )

那么 μ 是什么?就是容斥系数!

μ ( 1 ) = 1 , μ ( 2 ) = 1 , μ ( 3 ) = 1 , μ ( 4 ) = 0 , μ ( 5 ) = 1

μ ( n ) = { 0 ,   x 2 | n ( 1 ) k , n = i = 1 k p i  

μ 显然是一个积性函数。
d | n μ ( d ) = { 1 , n = 1 0 , n 1

莫比乌斯反演

F ( n ) = d | n f ( d )

f ( n ) = d | n F ( d ) μ ( n d ) = d | n f ( d ) g | n d μ ( g ) = f ( n )

F ( n ) = n | d f ( d )

f ( n ) = n | d F ( d ) μ ( d n ) = n | d f ( d ) g | d n μ ( g ) = f ( n )

回到栗子:
i = 1 n j = 1 m [ i j ] = i = 1 n j = 1 m d | ( i , j ) μ ( d ) = d = 1 min ( n , m ) μ ( d ) n d m d  

当然这样还是做不了。。。
所以我们需要杜教筛!(后面再说吧。。)
不过大多数 μ 的题(第一步)这么化,所以这个式子还是比较重要的。

初等积性函数 φ

φ(n)=1~n与n互质的数的个数φ(n)=1~n与n互质的数的个数
所以由定义便可直接写出:

φ ( n ) = d | n μ ( d ) n d = i j = 0 k i μ ( p i j ) p k i j = i p i k i 1 ( p i 1 )  

这样就可以线筛出来了,而且可以看出 φ 是一个积性函数。
从刚才的式子可以看出, φ 完全可以用 μ 代替,那么我们为什么需要 φ 呢?
很大一部分原因是它定义比较直观,比较容易想到。

φ 的性质:

d | n φ ( d ) = d | n d g | n d μ ( g ) = n  

栗子:求
i = 1 n j = 1 m ( i , j )
多组数据 t , n , m <= 10 5
a n s = i = 1 min ( n , m ) φ ( i ) n i m i  

杜教筛

i = 1 n μ ( i )   , n 10 11

直接求不好求,但是我们有
i = 1 n d | i μ ( d ) = 1

化一下蛤:
i = 1 n j = 1 n i μ ( j ) = 1

i = 1 n μ ( i ) = 1 i = 2 n j = 1 n i μ ( j )

核心思想是枚举约数,这样就可以递推/递归求解了。

时间复杂度 O ( n 3 4 )

但是注意到当 n 比较小的时候其实我们可以 O ( n ) 线筛出来。

所以我们考虑分类讨论,线筛出≤B的,>B的递推。

时间复杂度 O ( B + i = 1 n B n i ) = O ( B + n B )  

求导一下可知在 B = n 2 3 时取得最小值 O ( n 2 3 )

回到栗子:这样的话最初的栗子就会做了吧~

i = 1 n j = 1 m [ i j ] = i = 1 n j = 1 m d | ( i , j ) μ ( d ) = d = 1 m i n ( n , m ) μ ( d ) n d m d  

注意到杜教筛的时候不仅是求出了 j = 1 n μ ( j ) ,还顺便求出了所有的 j = 1 n i μ ( j ) ,所以可以和普通的枚举除法完美契合。

那么怎么求 i = 1 n φ ( i )

n ( n + 1 ) 2 = i = 1 n d | i φ ( d ) = i = 1 n j = 1 n i φ ( j )


转自:https://www.cnblogs.com/abclzr/p/6242020.html


  1. 不明白的地方。

猜你喜欢

转载自blog.csdn.net/dt_kang/article/details/79944961