莫比乌斯反演与杜教筛

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

关于除法

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

积性函数

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

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

f不是0的常值函数时,f(1)=1
积性函数的狄利克雷前缀和也是积性函数1
s(n)=d|nf(d)=ij=0kif(pji)

两个积性函数的狄利克雷卷积也是积性函数。
c(n)=d|na(d)b(nd)=ij=0kia(pij)b(pikij)

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

初等积性函数μ

栗子:给定nm,求i=1nj=1m[ij],n,m<=109,不用μ怎么做?

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

f(n,m)=nmi=2min(n,m)f(ni,mi) 

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

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

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

μ(n)={0, x2|n(1)k,n=i=1kpi 

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

莫比乌斯反演

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=1nj=1m[ij]=i=1nj=1md|(i,j)μ(d)=d=1min(n,m)μ(d)ndmd 

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

初等积性函数φ

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

φ(n)=d|nμ(d)nd=ij=0kiμ(pij)pkij=ipiki1(pi1) 

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

φ的性质:

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

栗子:求
i=1nj=1m(i,j)
多组数据 t,n,m<=105
ans=i=1min(n,m)φ(i)nimi 

杜教筛

i=1nμ(i) ,n1011

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

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

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

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

时间复杂度O(n34)

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

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

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

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

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

i=1nj=1m[ij]=i=1nj=1md|(i,j)μ(d)=d=1min(n,m)μ(d)ndmd 

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

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

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


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


  1. 不明白的地方。
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页