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