【笔记】莫比乌斯反演/筛法

来自Sharpness省选复习计划中的莫比乌斯反演/筛法


例题1

线性筛素数,每个数只会被它最小质因子筛掉,借此我们可以线性求出很多积性函数如μ , φ等。

例题2

整除分块,给定n,则ni的取值不超过N种,因为iN时不超过N种取值,>N时也不超过N

所以我们可以把所有ni相同的i分到一段。总共不超过N段。

整除分块的写法可以直接套用。

代码

例题3

[L,R]选出N个数使得他们的gcd=K。不妨将所有数/k,将问题转换为在[L,R]中选取N个数使得gcd=1。显然这可以直接暴算了。

题目给出RL105,考虑更简单的方法。我们可以先求出f[i]表示公约数为i的方案数,再通过f[k×i],kN+,容斥求出最大公约数为i的方案数。

代码


迪利克雷卷积#

h=fg,则有h(n)=d|nf(d)g(nd)

性质 1:若f,g为积性函数,则fg也为积性函数。

证明:

  • 如果pq,则 w|pqw=uv,u|pv|q一一对应 。因为w的每一个质因子可以唯一分配到 p 或者 q 中。
  • 所以h(p×q)=w|pqf(w)g(pqw)=u|p,v|qf(u)f(v)g(pu)g(qv)=h(p)h(q)

反演#

性质 2μ1=ϵ

应用:i=1nj=1m[gcd(i,j)=1]=i=1nj=1md|i,jμ(d)=d=1min(n,m)μ(d)ndmd

性质 3φ1=Id

应用:i=1nj=1mgcd(i,j)=i=1nj=1md|i,jφ(d)=d=1min(n,m)φ(d)ndmd


例题4

莫比乌斯反演模板题。

利用性质 2 ,用线性筛预处理μ,然后整除分块可以做到O(TN)

代码

例题5

经典 trick : σ(ij)=a=1ib=1j[gcd(a,b)=1]

然后利用性质2求解即可。

代码


杜教筛#

杜教筛用来在优于线性的时间复杂度内求出积性函数的前缀和。

如果我们需要求积性函数 f 的前缀和 S,我们可以找一个合适的函数 g,令h=fg

i=1nh(i)=i=1nd|ig(d)f(id)=d=1ng(d)i=1ndf(i)=d=1ng(d)S(nd)

所以有

i=1nh(i)d=2ng(d)S(nd)=g(1)S(n)

如果我们选取的g函数能使得h(i)快速求出,我们可以将这个问题递归分解下去。由问题S(n)分解到S(nd)。并不难得到一个时间复杂度为O(N34)

考虑优化,我们可以将所有MS(i) 全部筛出来,不难证得当M=N23时,时间复杂度最优且为O(N23)


例题6

利用μ,φ函数的性质。μ1=ϵφ1=Id,其中函数 1,ϵ,Id 的前缀和都可以 O(1) 求得,直接套用上面的公式即可。

代码

例题7

转化一下,发现我们需要求i=1ni2φ(i)

根据套路,我们令f(n)=n2φ(n)g(n)=n2。令h=fg,有:

h(n)=d|nf(d)g(nd)=n2d|nφ(d)=n3

g,h的前缀和都非常好求,而f又是个积性函数,所以直接上杜教筛即可。

代码

好现在你已经精通莫反和基础筛法了,试着完成下面的练笔吧XD。

T1代码

T2代码

作者:7KByte

出处:https://www.cnblogs.com/7KByte/p/16143263.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   7KByte  阅读(123)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示