在这片梦想之地,不堪回首的过去像泡沫一样散去,不愿|

PassName

园龄:3年1个月粉丝:32关注:16

二维积性函数——zky 数论选讲学习笔记

二维积性函数——zky 数论选讲学习笔记

线性筛

埃氏筛:从小到大扫,遇到一个质数就将其所有倍数标记为合数。可以证明时间复杂度是 O(nloglogn) 的。

对于一个合数,考虑在其最小质因子 p 处筛掉他。设这个合数是 x×p,先枚举 x,然后再从小到大枚举 p,并标记 xp 为合数。如果枚举的过程中发现 xmodp=0,那么当 p 更大时 p 就不是 xp 的最小质因子了,终止循环。

每个合数只会被筛一次,所以时间复杂度 O(n)。该筛法还可以直接用于筛 f(i)=in 等积性函数。适用范围广,但复杂度也大。

数论函数和积性函数

定义:数论函数是定义域为正整数集,陪域为复数域的函数。

把它看成是一个只在整数处有值的函数就行了。
对于一个数论函数 f,约定 Sf(n)=i=1nf(i)

定义:积性函数是指一个定义域为正整数 n 的数论函数 f(n),且满足如下性质:f(1)=1,且当 ab 互质时,f(ab)=f(a)f(b)

对于一个积性函数 f,只要知道了对于所有 f(pk)p 是质数,k 是正整数),我们就可以知道整个 f 函数。

一般来说,我们说明一个数论函数是积性函数,只需要说明对于任意
x=ipiαi,都有 f(x)=if(piαi) 即可。

Dirichlet 卷积

对于数论函数 fg,定义其 Dirichlet 卷积:

(fg)(x)=d|xf(d)g(xd)

如果将 Dirichlet 卷积视为数论函数的乘法,函数的直接加和为数论函数的加法。那么数论函数的加法和乘法是满足交换律、结合律和分配律的。

定理:对于积性函数 A, BC=AB 也是积性函数。

也可以定义 Dirichlet 除法 A/B=C 使得 BC=A。只要
B(1)1,就能逐位确定 C。此时 C 存在且唯一。

定理:如果 AB 都是积性函数,那么 C 一定也是积性函数。

Dirichlet 前缀和

给定数组 a,求数组 b 满足 bx=y|xay

我们可以将问题看成是,对于一个数论函数 A,我们要求出 AI 的前 n 项。

因为 I 是一个积性函数,所以将其看成是积性函数的乘积。
fi(pk)=[p=pi]pi 是从小到大第 i 个质数)。那么 I=fi。所以 AI=Af1f2...,即每次乘一个 fi。注意到乘单个 fi 是可以 O(npi) 完成的。所以总时间复杂度就变成了 O(nloglogn)

普通数论函数卷普通积性函数也可以类似地做到 O(nloglogn)

该算法的“转置算法”求 bx=x|yay 也可以在相同复杂度内完成。

整除分块

计算 i=1nd(i)

答案为 i=1n=xy=i1=xyn1=x=1nnx

注意到 nx 实际上只有 O(n) 段,所以考虑一些基于此的暴力。

l=1 开始。设 v=nk。每次找出满足 nr=v 的最大的 r,然后 [l,r] 这一段元素就可以被跳过,新的 l=r+1 继续做。

这个 r 就是满足 nrv 的最大的 r,即 nv。所以这个问题容易 O(n) 解决。

例题

给定序列 A,B,C,求 i=1nj=1nA(i)B(j)C(gcd(i,j))
n106

传统做法是莫比乌斯反演,考虑使用积性函数性质解决。
设计函数 D 满足 C=D×I,即 Ci=j|iDj

那么答案等于 i=1nA(i)j=1nB(j)d|i,d|jD(d)

交换求和顺序,答案即为 dD(d)(d|iA(i))(d|iB(i))

Powerful Number

定义:称一个正整数 mPowerfulNumber,当且仅当对于任意 m 的质因数 p,均有 p2|m

定理:对于所有 PN,我们都可以将其表示成 a2b3 的形式(其中 ab 都是正整数)。

定理:n 以内的 PN 个数为 O(n)

UOJ 885 红场阅兵

对于 70pts 部分分:给定一个积性函数 S,求 i=1nj=1nS(ij)n3×107

为了解决上面的问题,需要把积性函数推广到二维。

首先二维数论函数 g(x,y) 还是没什么性质的普通函数。

称二维数论函数 f(x,y) 是二维积性函数,当且仅当 a,b,c,d 使得 gcd(ab,cd)=1,都有 f(ac,bd)=f(a,b)f(c,d)
上面这个定义还是有点太抽象了(这是按照一维积性函数的定义改的)。实际上可以更简单地理解这件事情。假设 pi 是从小到大第 i 个质数 x=ipi\aiy=ipibi,那么 f(x,y)=if(piai,pibi)

容易发现,要求的是一个二维积性函数 f(x,y)=S(xy) 的二维前缀和

类似地,定义二维 Dirichlet 卷积。设 a,bDirichlet 卷积为 c,那么:

c(x,y)=u|x,v|ya(u,v)b(x/u,y/v)

类似一维地,c(1,1)0 的数论函数存在逆元;两个二维积性函数的 Dirichlet 卷积和 Dirichlet 除法都是二维积性函数

类似 PowerfulNumber 地,考虑用 PowerfulNumber 的思想来解决问题。

考虑设计积性函数 g(x,y) 满足 g(pa,pb)=f(pa,1)f(1,pb)。对于这个函数,其前缀和 in1jn2f(ij) 是相当容易计算的。

观察 h=f/g。对于单个 p 来说,发现这个 Dirichlet 除法相当于是二维多项式的除法。

发现 h(pk,1)=h(1,pk)=0

i=1nj=1nf(i,j)=u,vh(u,v)(iun,jvng(i,j))

复杂度 O(n)

(时间复杂度的证明没看懂,所以留着吧,反正 O(n) 肯定能解决。)

P3327 [SDOI2015] 约数个数和

直接套用上文的做法,发现 h(x,y) 只在 x=y 处有值且值为 µ(x)。所以答案为 i=1nµ(i)(j=1n/id(j))(k=1m/id(k)),整除分块解决,复杂度 O(N+TN)

submission

P4619 [SDOI2018] 旧试题

把做法拓展到三维,可以得到 h(pa,pb,pc) 只在 a,b,c 形成的可重集是 {0,0,0},{0,1,1},{1,1,1} 处有值。直接搜有值位置的复杂度就是 O(nn)

submission

本文作者:PassName

本文链接:https://www.cnblogs.com/spaceswalker/p/18274783

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   PassName  阅读(70)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起