以下内容均来自TA爷课件,我只是改了几个小的地方qwq
关于除法
- ⌊ni⌋ ⌊ n i ⌋ 只有 O(n−−√) O ( n ) 种取值。
2.对于 i i , ⌊n⌊ni⌋⌋ ⌊ n ⌊ n i ⌋ ⌋ 是与i被n除并下取整取值相同的一段区间的右端点。
3.一个很有用的性质: ⌊nab⌋=⌊⌊na⌋b⌋=⌊⌊nb⌋a⌋ ⌊ n a b ⌋ = ⌊ ⌊ n a ⌋ b ⌋ = ⌊ ⌊ n b ⌋ a ⌋
上取整也有3所述的性质。
积性函数
f(ab)=f(a)f(b),(a,b)=1 f ( a b ) = f ( a ) f ( b ) , ( a , b ) = 1
完全积性:不要求
(a,b)=1。 ( a , b ) = 1 。
考虑时一般会考虑成
f(x)=∏if(pkii) f ( x ) = ∏ i f ( p i k i )
当
f f 不是0的常值函数时,
f(1)=1 f ( 1 ) = 1 。
积性函数的狄利克雷前缀和也是积性函数 1。
s(n)=∑d|nf(d)=∏i∑j=0kif(pij) s ( n ) = ∑ d | n f ( d ) = ∏ i ∑ j = 0 k i f ( p j i )
两个积性函数的狄利克雷卷积也是积性函数。
c(n)=∑d|na(d)b(nd)=∏i∑j=0kia(pji)b(pki−ji) 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 x 的最小质因子
p1 p 1 及其次数
k1 k 1 。如果我们能以较小的代价
O(1) O ( 1 ) 求出
f(pk11) f ( p 1 k 1 ) ,便可以线筛了。
初等积性函数 μ μ
栗子:给定 n n , m m ,求 ∑ni=1∑mj=1[i⊥j],n,m<=109 ∑ i = 1 n ∑ j = 1 m [ i ⊥ j ] , n , m <= 10 9 ,不用 μ μ 怎么做?
容斥!设dp数组 f(i,j) f ( i , j ) 为当 n=i,m=j n = i , m = j 时的答案。
f(n,m)=nm−∑i=2min(n,m)f(⌊ni⌋,⌊mi⌋) f ( n , m ) = n m − ∑ i = 2 min ( n , m ) f ( ⌊ n i ⌋ , ⌊ m i ⌋ )
时间复杂度 O(∑i=1⌊n√⌋(⌊ni⌋−−−√+i√))=O(n34) O ( ∑ i = 1 ⌊ n ⌋ ( ⌊ n i ⌋ + i ) ) = O ( n 3 4 )
那么 μ μ 是什么?就是容斥系数!
μ(1)=1,μ(2)=−1,μ(3)=−1,μ(4)=0,μ(5)=−1… μ ( 1 ) = 1 , μ ( 2 ) = − 1 , μ ( 3 ) = − 1 , μ ( 4 ) = 0 , μ ( 5 ) = − 1 …
μ(n)=⎧⎩⎨⎪⎪0(−1)k,,∃ x2|nn=∏i=1kpi μ ( n ) = { 0 , ∃ x 2 | n ( − 1 ) k , n = ∏ i = 1 k p i
μ μ 显然是一个积性函数。
∑d|nμ(d)={10,,n=1n≠1 ∑ d | n μ ( d ) = { 1 , n = 1 0 , n ≠ 1
莫比乌斯反演
F(n)=∑d|nf(d) F ( n ) = ∑ d | n f ( d )
f(n)=∑d|nF(d)μ(nd)=∑d|nf(d)∑g|ndμ(g)=f(n) f ( n ) = ∑ d | n F ( d ) μ ( n d ) = ∑ d | n f ( d ) ∑ g | n d μ ( g ) = f ( n )
F(n)=∑n|df(d) F ( n ) = ∑ n | d f ( d )
f(n)=∑n|dF(d)μ(dn)=∑n|df(d)∑g|dnμ(g)=f(n) f ( n ) = ∑ n | d F ( d ) μ ( d n ) = ∑ n | d f ( d ) ∑ g | d n μ ( g ) = f ( n )
回到栗子:
∑i=1n∑j=1m[i⊥j]=∑i=1n∑j=1m∑d|(i,j)μ(d)=∑d=1min(n,m)μ(d)⌊nd⌋⌊md⌋ ∑ 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)nd=∏i∑j=0kiμ(pji)pki−j=∏ipki−1i(pi−1) φ ( 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|nd∑g|ndμ(g)=n ∑ d | n φ ( d ) = ∑ d | n d ∑ g | n d μ ( g ) = n
栗子:求
∑i=1n∑j=1m(i,j) ∑ i = 1 n ∑ j = 1 m ( i , j )
多组数据
t,n,m<=105 t , n , m <= 10 5
ans=∑i=1min(n,m)φ(i)⌊ni⌋⌊mi⌋ a n s = ∑ i = 1 min ( n , m ) φ ( i ) ⌊ n i ⌋ ⌊ m i ⌋
杜教筛
求
∑i=1nμ(i) ,n⩽1011 ∑ i = 1 n μ ( i ) , n ⩽ 10 11
直接求不好求,但是我们有
∑i=1n∑d|iμ(d)=1 ∑ i = 1 n ∑ d | i μ ( d ) = 1
化一下蛤:
∑i=1n∑j=1⌊ni⌋μ(j)=1 ∑ i = 1 n ∑ j = 1 ⌊ n i ⌋ μ ( j ) = 1
∑i=1nμ(i)=1−∑i=2n∑j=1⌊ni⌋μ(j) ∑ i = 1 n μ ( i ) = 1 − ∑ i = 2 n ∑ j = 1 ⌊ n i ⌋ μ ( j )
核心思想是枚举约数,这样就可以递推/递归求解了。
时间复杂度 O(n34) O ( n 3 4 ) 。
但是注意到当 n n 比较小的时候其实我们可以 O(n) O ( n ) 线筛出来。
所以我们考虑分类讨论,线筛出≤B的,>B的递推。
时间复杂度 O(B+∑i=1nBni−−√)=O(B+nB√) O ( B + ∑ i = 1 n B n i ) = O ( B + n B )
求导一下可知在 B=n23 B = n 2 3 时取得最小值 O(n23) O ( n 2 3 ) 。
回到栗子:这样的话最初的栗子就会做了吧~
∑i=1n∑j=1m[i⊥j]=∑i=1n∑j=1m∑d|(i,j)μ(d)=∑d=1min(n,m)μ(d)⌊nd⌋⌊md⌋ ∑ 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=1nμ(j) ∑ j = 1 n μ ( j ) ,还顺便求出了所有的 ∑j=1⌊ni⌋μ(j) ∑ j = 1 ⌊ n i ⌋ μ ( j ) ,所以可以和普通的枚举除法完美契合。
那么怎么求 ∑i=1nφ(i) ∑ i = 1 n φ ( i ) ?
n(n+1)2=∑i=1n∑d|iφ(d)=∑i=1n∑j=1⌊ni⌋φ(j) 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