[笔记]杜教筛核心原理

i = 1 n j = 1 m g c d ( i , j )
= d = 1 n d f ( d )
= d = 1 n d d | j μ ( j / d ) F ( d )
= i × j <= n i μ ( j ) F ( i j )
= T = 1 n F ( T ) ϕ ( T )
= T = 1 n [ n T ] [ m T ] ϕ ( T )

———-杜教筛:
已知问题:

S ( n ) = i = 1 n f ( i )

取一个积性函数g使得f*g方便计算前缀和并做如下变换
( g f ) ( i ) = d | i f ( d ) g ( i / d )

i = 1 n ( g f ) ( i ) = i = 1 n d | i f ( d ) g ( i / d )

= i j <= n f ( i ) g ( j )

= i = 1 n g ( i ) j = 1 n / i f ( j )

= i = 1 n g ( i ) S ( n / i )

就可以得到
S ( n ) = 1 S ( n ) = g ( 1 ) S ( n )

= i = 1 n g ( i ) S ( n / i ) i = 2 n g ( i ) S ( n / i )

= i = 1 n ( g f ) ( i ) i = 2 n g ( i ) S ( n / i )

后面就是递归计算了,注意要记忆化S

猜你喜欢

转载自blog.csdn.net/JacaJava/article/details/81273904
今日推荐