Loading

数论函数浅谈

数论函数浅谈

写在前面

  1. 在没有注明特殊情况下,文中 p 为质数,pq 为质因数分解。
  2. 在没有注明特殊情况下,除恒等函数(I)以外,文中的函数字母大写表示前缀和。同样表示前缀和有在开头的一个大写 S。如 F(n) 表示 i=1nf(i)Sφ(n) 表示 i=1nφ(i)
  3. 笔者水平低,如有写的有问题的欢迎指出。
  4. 例题部分,在推导式子时有时候会不注明 nm,理解即可。

5个需要知道的函数

  1. I(n)

无论 n 是啥,永远是 1,叫做恒等函数

  1. ϵ(n)

n=1 时它等于 1,否则等于 0,叫做元函数

  1. id(n)

永远等于 n,叫做单位函数

  1. φ(n)

[1,n] 中与 n 互质数的个数,叫做欧拉函数

  1. μ(n)

    μ(n)={1,n=1(1)s,n=p1p2...ps0,otherwise

其中,p1pn 是不同素数

这个函数叫做叫做莫比乌斯函数,后面进一步讨论

卷积

定义

离散卷积是两个离散序列和之间按照一定的规则,将它们的有关序列值分别两两相乘再相加的一种特殊的运算y(n)=i=x(i)·h(ni)

理解这个格式就好

狄利克雷卷积

定义

f,g 是数论函数,若数论函数 h 满足

h(n)=d|nf(d)g(nd)

则称 hfg 的狄利克雷卷积,记作h=fg

狄利克雷卷积满足交换律和结合律

积性函数

积性函数

对于一个函数 f,若 a,b 互质的时候,有f(ab)=f(a)(b) 其中五个需要知道的函数中 45 是积性函数

完全积性函数

对于任何整数 a,b 有上面那个公式

其中五个需要知道的函数中 1,2,3 是完全积性函数

重要性质!

两个积性函数的卷积必然是积性函数

莫比乌斯函数

定义

回顾一下之前莫比乌斯函数的定义

μ(n)={1,n=1(1)s,n=p1p2...ps0,otherwise

这个定义看起来有点莫名其妙,但是实际上莫比乌斯函数来源应该是这样的:

考虑 g(n)=d|nf(d),写成卷积形式为 g=If,此时如果两边同时乘一个 I1 会发生这样的事情:gI1=f。对于这个 I1 大佬们就将其定义为 μ,之后也便对倒出来了 μ 的定义。这个有什么用在看到例题的时候可以具体说。

一个性质

莫比乌斯函数具有以下重要的性质:

d|nμ(d)=ϵ(n)

μI=ϵ

简证:不妨设 n=p1q1p2q2...psqs,其中所有指数 q 显然没有意义(根据 μ 的定义,如果存在一个平方数能够整除 x 那么 μ(x)=0,也就是说,我们就是在 s 个质数当中选几个凑出来一个因数,因此也就写成了第一个等号后面的东西。之后用二项式定理 (a+b)n=i=0nCniaibni 套进去即可。

d|nμ(d)=k=0s(1)kCsk=(11)s=0

在后面推柿子的时候会用到。

其实对于所有积性函数,有 ff1=ϵ

莫比乌斯反演

约数反演

g(n)=d|nf(d)f(n)=d|nμ(d)g(nd)

证明

g(n)=d|nf(d) 运用狄雷克利卷积将函数写成 fI 的形式g=fI 两边同时卷积 μ

gμ=fIμ 根据莫比乌斯函数的性质和元函数的性质整理fIμ=f(Iμ)=fϵ=f

倍数反演

这个用的不多,但是最近刚刚碰到过,形式是这样的

g(n)=n|df(d)f(n)=n|dμ(dn)g(n)

好像讲到这里就是反演需要知道的所有基础的知识了,反演很多题目都是通过这些基础的东西来进行推导的。


杜教筛

同样是和积性函数有关的一个知识点,一起讲一下。

我们要求 f(x) 的前缀和,即 i=1nf(i),下面记作 F(n)

假如我们知道有 fg=h,我们尝试求一下 H(n)

H(i)=i=1nh(i)=i=1nd|if(d)g(id)=i=1nj=1nif(j)g(i)=i=1ng(i)j=1nif(j)=i=1ng(i)F(ni)=g(1)F(n)+i=2ng(i)F(ni)

这样就有以下式子:

F(n)=H(n)i=2ng(i)F(ni)g(1)

因为是积性函数,因此有 g(1)=1,所以最终为

F(n)=H(n)i=2ng(i)F(ni)

如果能够构造出来前缀和比较好算的 g,h,我们就可以快速计算出来 F(n)

如对于 φ,有 φI=id,因此

Sφ(i)=n(n+1)2i=2nSφ(ni)

如对于 μ,有 μI=ϵ,则

Sμ(i)=1i=2nSμ(ni)


Powerful Number 筛

以下简称 PN 筛。PN 筛也是用来求一些积性函数的前缀和,更像是杜教筛的一个扩展。

Powerful Number

对于一个数,可以被写成 i=1spiqi 的形式。如果这个数满足 qi,qi>1 则称之为 Powerful Number。

可以证明 n 以内的 PN 数量是 O(n) 的。

现在要求的是 i=1nf(i),假设我们有一个好求前缀和的函数 g 满足对于所有的质数,有 f(p)=g(p)。我们再构造出来 f=gh

对于一个质数,我们有 f(p)=g(1)h(p)+g(p)h(1)=h(p)+g(p) 因为我们设了 f(p)=g(p),因此有 h(p)=0。又因为 h 是积性函数,根据积性函数的性质我们有 h 只有在 PN 处是有值的。

接着开始一段常见的计算。

F(n)=i=1nf(i)=i=1nd|ih(i)g(id)=i=1nj=1nih(i)g(j)=i=1nh(i)G(ni)=i=1,iNPnh(i)G(ni)

因为 PN 是 O(n) 的,因此可以直接暴力枚举,后面的可以通过杜教筛等求出来 G 的前缀和。

例题杂记

简单整理一些做莫反题的笔记。

P3455

给定 n,m,k

i=1nj=1m[gcd(i,j)=k]

nm

i=1nj=1m[gcd(i,j)=k]=i=1nkj=1mkϵ(gcd(i,j))=i=1nkj=1mkd|i,d|jμ(d)=d=1mkμ(d)d|inkd|jmk1=d=1mkμ(d)nkdmkd

整除分块即可,基础模版轻松通过。

P2257

给定 n,m

i=1nj=1m[gcd(i,j)=p]

先化成上面的形式

pmd=1mpμ(d)ndpmdp

但是这样是通过不了的,枚举质数是不现实的。

能不能处理一下 dp? 设 dp=t,枚举 dp 试试

t=1mp|tμ(tp)ntmt=t=1mntmtp|tμ(tp)

仔细观察后面的一段,在预处理的时候,我们是不是可以直接预处理出来对于所有 t 其取值,前面的整除分块一下,这样复杂度就为 O(Tm+nlog2n) 可以通过。

P2522

给定 a,b,c,d,k

i=abj=cd[gcd(i,j)=k]

知道差分就不用说啥了,为了简便,设 f(a,b,c,d) 为上面那个柿子

f(a,b,c,d)=f(1,b,1,d)f(1,a1,1,d)f(1,b,1,c1)+f(1,a1,1,c1)

对于 f(1,n,1,m) 和第一题是一样的。

P3312

给定 n,m,a 求:

i=1nj=1m(σ1(gcd(i,j))[(σ1(gcd(i,j))a])

a 的限制比较碍事,先考虑求

i=1nj=1mσ1(gcd(i,j))

考虑暴力枚举其值,有

d=1nσ1(d)i=1nj=1m[gcd(i,j)=d]

整理得

d=1nσ1(d)x=1ndμ(x)ndxmdx

t=dx

t=1nntmtd|tσ1(d)μ(td)=t=1nntmtid(t)

但是还有个限制,如果直接变成了 id(t) 那么无法判断大小了,往回一步考虑性质。

t=1nntmtd|tσ1(d)μ(td)

回到这个柿子当中,考虑到 σ1(d)a 的时候才能够对于答案产生贡献,现在把这个东西离线一下,对于 a 排序。这样可以通过枚举倍数的方法更新整个柿子的值,枚举倍数的复杂度是 nlnn 的,观察到这个柿子后面的东西是一个前缀和,也就是说我们要维护单点修改 + 求前缀和,可以直接用数状数组维护。

推柿子比较套路化,最后一步离线维护比较新。

P1829

给定 n,m

i=1nj=1mlcm(i,j)

化成 gcd 的形式,有

i=1nj=1mijgcd(i,j)

直接暴力枚举 gcd

k=1n1ki=1nj=1mij[gcd(i,j)=k]=k=1n1ki=1nkj=1mkijk2ϵ(gcd(i,j))=k=1nki=1nkj=1mkijϵ(gcd(i,j))

考虑式子后面的东西,设 s(n,m)=i=1nj=1mijϵ(gcd(i,j))

同样,由 μI=ϵ,有

s(n,m)=i=1nj=1mijd|i,d|jμ(d)=d=1nd|id|jijμ(d)=d=1nμ(d)d2i=1ndij=1mdj

不妨设 f(n,m)=i=1nij=1mj,小学就学过,这东西应该等于 n(n+1)2×m(m+1)2

此时有

s(n,m)=d=1nμ(d)d2f(nd,md) 这部分整除分块即可。

又考虑到原式,为

k=1nk×s(nd,md)

同样整除分块,复杂度 O(n)

代码实现反而没多难。

P3768

给定 n

i=1nj=1nijgcd(i,j)n1010

和上一题很相似,试试看

i=1nj=1nijgcd(i,j)=k=1nki=1nj=1nij[gcd(i,j)=k]=k=1nk3i=1nkj=1nkijϵ(gcd(i,j))

现在和上面一样,但是这题不能够直接 O(n) 还得进一步化简。

还是反演拆开

=k=1nk3i=1nkj=1nkijd|i,d|jμ(d)=k=1nk3d=1nkd|inkd|jnkijμ(d)=k=1nk3d=1nkd2μ(d)i=1nkdj=1nkdij

注意到最后面其实和上面是类似的,但这时候是没有两个变量的,因此可以设 f(x)=x2(x+1)24,T=kd

原式为

k=1nk3d=1nkd2μ(d)f(nT)

个人觉得自己只能推到这里了,但是这里还是有操作空间的,我们来一个乾坤大挪移,并且改为枚举 T

T=1nf(nT)T2k|Tkμ(Tk)

这东西不看不知道,一看吓一跳,后面这个东西是啥,不就是 μid 嘛。

两个小的插曲

φI=id

μid=φ

考虑第一个的证明,展开来有

d|nφ(d)

考虑意义,这里其实和我们很多时候拆 gcd 的样子很像。考虑到 φ(x) 为满足 gcd(x,y)=1y 的个数。那么如果 gcd(x,y)=d 也就是说这时候应该有 gcd(xd,yd)=1 也就是 φ(xd)。那么看到原式,就可以把起理解为和 n 的最大公因数分别为 n 的所有因子数数的数量,这显然是 n

再进行一些简单的卷积推导 φI=idφIμ=idμμid=φ

回归正题

此时式子就变成了

T=1nf(nT)T2φ(T)

但是似乎又停下来了。

现在面对一个问题,就是 这中间多了一个 T2,如果没有这个可以容易通过杜教筛求出来这个式子的值,O(n23)

等等,杜教筛?后面这个东西不也是一个积性函数吗?套用一下杜教筛的思路。

g(x)=x2φ(x),要求 G(x)

研究一下 gh

(gh)(x)=d|xg(d)h(xd)=d|xd2φ(d)h(xd)

不妨设 h(x)=x2,这样带回就有了 (gh)(x)=x2id(x)=x3

好极了,现在对于 h,hg 这两个东西的积性函数都是好球前缀和的,套一下杜教筛的公式:

G(x)=(gh)(n)i=2nh(i)G(ni)

再用一点小学的知识,把它写成正确的形式。

G(x)=x2(x+1)24i=2nh(i)G(ni)

后面的东西整除分块 + 平方和即可。

有了 g(x) 那么带会到原式,就可以得到答案了。

非常爽的推式子题,同时运用了杜教筛的思想。

AGC038C

给定 n 和长度为 n 的数列,求

i=1nj=i+1nlcm(ai,aj)

先考虑计算 i=1nj=1nlcm(ai,aj)

尝试直接展开,设 m=maxi1nai

i=1nj=1nlcm(ai,aj)=i=1nj=1naiajgcd(ai,aj)=k=1m1ki=1nj=1naiaj[gcd(ai,aj)=k]

注意这里是后面枚举的是 ai,aj,因此反演之后应该是这样子的

k=1m1ki=1nj=1naiaj[k|ai][k|aj]d|aik,d|ajkμ(d)

考虑枚举 d,前面枚举的时候只需要枚举到 mk 因为后面的限制,之后后面要保证 d|aik,因为枚举的时候已经满足了 daik 因此其实只需要满足 d|ai 即可。整理一下写出来就是

k=1md=1mkμ(d)ki=1nj=1naiaj[k|ai][k|aj][d|ai][d|aj]

后面两个还可以合并,即

k=1md=1mkμ(d)ki=1nj=1naiaj[dk|ai][dk|aj]

目前看起来,前面的一堆东西是可以比较快速地处理的,后面的形式感觉是有前途的。分离一下 i,j

k=1md=1mkμ(d)ki=1nai[dk|ai]j=1naj[dk|aj]

会发现后面的两个东西是完全等价的,因此可以变成

k=1md=1mkμ(d)k(i=1nai[dk|ai])2

最后就是考虑后面这个东西怎么计算了,仔细观察前面的枚举过程,其实所有的 dk 相当于枚举所有在 m 范围内的 k 的倍数,也就是说对于每个 k 都只有满足是 k 倍数的 ai 才会有贡献,这个东西显然可以预处理,因为有

i=1nninlnn

之后对于这个东西算出来的答案减去 ai 再除以 2 即可。

???

f(1)=1f(pc)=f(p+c)cf(x)=if(pici)

显然 f 是积性函数,求其前缀和 n1013

观察到 f(p)=p+1 不难想到用 PN 去处理这个问题。

回忆 PN 的过程,首先需要构造出 g(p)=f(p) 那么什么函数满足 ?(p)=p+1 呢。经过一些玄学,可以找到 σ(p)=p+1

进行 PN 的套路。设 f=ghh(x)=(fσ1)(x)。则:

F(n)=i=1nd|ih(d)σ(id)=d=1,dPNnh(d)Sσ(nd)

由于 idI=σ 后面的东西可以整除分块,前面暴力枚举 PN 即可。最后考虑 h(pc) 怎么计算。根据定义

hσ=fi=0cσ(pi)h(pci)=f(pc)1×h(pc)=f(pc)i=1cσ(pi)h(pci)

因为 cO(logpn) 级别的,暴力计算即可。

感觉最近反应真的有点点迟钝了。

posted @   Jryno1  阅读(17)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示