胡杨河市网站建设_网站建设公司_Linux_seo优化
2025/12/25 14:15:21 网站建设 项目流程

数论分块

数论分块是一个很常用的技巧。我们考虑\(\lfloor n/i\rfloor\)的值,显然只有\(O(2\sqrt n)\)种。因为当\(n\le \sqrt n\)时,值显然有\(\sqrt n\)种。当\(n>\sqrt n\)时,值\(\le \sqrt n\),最多也只有\(\sqrt n\)种。所以我们可以枚举出每一段\(\lfloor n/i\rfloor\)相同的区间,以解决实际问题。具体方法如下:

\(for\space l=1;l\le n;l=r+1\)
{\(d=n/l;r=n/d;\) \(do\space something...\) }

大概就是枚举左端点\(l\),求出\(n/l=d\)和右端点\(r=n/d\),显然是正确的。这个技巧在实际问题中有很大作用。

数论函数

积性函数与加性函数

定义

若函数\(f\)的定义域为\(N^*\),则称\(f\)为数论函数。

若数论函数\(f\)满足\(f(ab)=f(a)+f(b)(gcd(a,b)=1)\),则称\(f\)为加性函数。特别的,若\(f\)满足\(f(ab)=f(a)+f(b)\),则称\(f\)完全加性函数。

若数论函数\(f\)满足\(f(ab)=f(a)\times f(b)(gcd(a,b)=1)\),则称\(f\)为积性函数。特别的,若\(f\)满足\(f(ab)=f(a)\times f(b)\),则称\(f\)完全积性函数。

一些简单数论函数

\(id_k(n)=n^k\),叫做幂函数,是完全积性函数。特别的,\(id_1(n)=id(n)=n\),叫做恒等函数;\(id_0(n)=1(n)=1\),叫做常数函数。

\(\epsilon(n)=[n=1]\),叫做单位函数,是完全积性函数。

\(\varphi(n)=\sum_{i=1}^n[gcd(i,n)=1]\),叫做欧拉函数,是积性函数。若\(n=p_1^{e_1}p_2^{e_2}...p_k^{e_k}\),则\(\varphi(n)=n\frac{p_1-1}{p_1}\frac{p_2-1}{p_2}...\frac{p_k-1}{p_k}\)

\(\mu(n)=\begin{cases}(-1)^k & n=p_1p_2...p_k\\0 & n\ne p_1p_2...p_k \end{cases}\),叫做莫比乌斯函数,是积性函数。

\(\sigma_k(n)=\sum_{d|n}d^k\),叫做除数函数,是积性函数。特别的,\(\sigma_0(n)=d(n)=\sum_{d|n}1\),叫做约数函数;\(\sigma_1(n)=\sigma(n)=\sum_{d|n}d\),叫做约数和函数。显然,若\(n=p_1^{e_1}p_2^{e_2}...p_k^{e_k}\),则\(d(n)=(e_1+1)(e_2+1)...(e_k+1),\sigma(n)=\frac{p_1^{e_1+1}-1}{p_1-1}\frac{p_2^{e_2+1}-1}{p_2-1}...\frac{p_k^{e_k+1}-1}{p_k-1}\)

\(\omega(n)=k(n=p_1^{e_1}p_2^{e_2}...p_k^{e_k})\),叫做质因子函数。是加性函数。

求法

每个函数在单点求值时都有自己的专门求法。线性筛是同时求\(1\sim n\)的常用方法。总的来说分三类处理:\(i\)为质数直接求,\(i\space mod\space prime_j=0\)的和\(i\space mod\space prime_j\ne 0\)的仔细求。一类比较难的就是\(\sigma_k(n)\)的线性筛。对于\(d(i)\),我们记一下\(i\)最小质因子的个数即可;对于\(\sigma_k(i)\),我们记一下\(i\)最小质因子的若干次幂,用等比数列即可处理。

狄利克雷卷积

定义与性质

定义\(f*g=h\)为数论函数\(f\)\(g\)的狄利克雷卷积,\(h(n)=\sum_{d|n}f(d)g(n/d)\)

显然,这个运算满足交换律和结合律。

容易证明,两个积性函数的卷积还是积性函数,所以我们在研究两个积性函数的卷积时,可以只考虑\(n=p^e\)的情况。但是注意,狄利克雷卷积是对任意数论函数都使用的。

有一个小性质是,\(f*\epsilon=f\),那么,若\(f*g=\epsilon\),那我们定义\(f,g\)互为狄利克雷卷积逆。所以,如果\(a*f=h\),那么\(a*(f*g)=a*\epsilon=a=g*h\)

一些常用结论

\(1\) \(\mu*1=\epsilon\)(莫比乌斯反演常用)

显然,\(\mu(p^e)*1(p^e)=\mu(1)+\mu(p)=0\)。所以\(\mu*1\)只在\(n=1\)时有值\(1\),即为\(\epsilon\)

所以,我们推广一下。\(f=g*1\)\(g=f*\mu\)显然是充要条件。这在后面的莫比乌斯反演中是十分重要的。

\(2\) \(\mu*id=\varphi,id=\varphi*1\)

先感性理解一下,左边的类似于容斥,用\(1-2-3-5+23+25+35...\)。若想求\(1\sim n\)内与\(n\)互质的数个数,就求\(n/1-n/2-n/3-n/5+n/(2*3)+n/(2*5)+n/(3*5)...\)。右边的就按\(gcd(i,n)=d\)来分类,\(gcd(i,n)=d\)的显然有\(\varphi(n/d)\)个,加起来即可。

理性一点就是\(\mu(p^e)*id(p^e)=p^e-p^{e-1}=\varphi(p^e)\),那么\(\mu*id=\varphi,id=\varphi*1\)。要学会这样的推导方法。

\(3\) \(1*1=d,1*d=\sigma\)

狄利克雷前缀和

真·狄利克雷前缀和

\(P5495\)

考虑每个质因子,则这就是一个类似前缀和的过程。考虑所有质因子,则这就是一个类似高维前缀和的过程。我们枚举每个质数,做一个前缀和即可,复杂度\(O(nloglogn)\)

狄利克雷前缀和的拓展

\(1\)\(b_i=\sum_{i|k,k\le n}a_k\)

简单,做个后缀和即可。

\(2\)\(b_i=\sum_{k|i}a_k\mu(i/k)\)

把前缀和改为差分即可。

\(3\) 对于数论函数\(f\)和积性函数\(g\),求\(f*g\)

把前缀和改成\(01\)背包即可,复杂度还是\(O(nloglogn)\)

莫比乌斯反演

容斥的"山寨"理解

还是感性地用容斥来理解理解。

\(P2158\)

转化过来就是求\(\sum_{i=1}^n\sum_{j=1}^n[gcd(i,j)=1]\)。这题可以用调和级数求\(gcd=k\)的对数,也可以转变为\(2\sum_{i=1}^n\varphi(i)-1\),但我们不这么干。

运用容斥,转变为\(\sum_{d=1}^n\mu(d)\lfloor n/d\rfloor^2\),预处理\(\mu\),复杂度\(O(n)\)

像这样运用容斥,我们就可以解决最基本的莫比乌斯反演问题了。

"高级"而广泛的理解

想一想你用上面的方法做不出来的问题,形式无非是求\(\sum_{i_1}\sum_{i_2}...\sum_{i_n}f(gcd(i_1,i_2,...,i_n))h(i_1,i_2,...,i_n)\)。这种问题的解法换汤不换药。

不妨设\(f=g*1\),则\(g=f*\mu\),那原式\(=\sum_{i_1}\sum_{i_2}...\sum_{i_n}\sum_{d|i_1,i_2,...,i_n}g(d)h(i_1,i_2,...,i_n)=\sum_{d}g(d)\sum_{d|i_1}\sum_{d|i_2}...\sum_{d|i_n}h(i_1,i_2,...,i_n)\)。这样,预处理好\(g\),我们就能很方便地解决问题了,这就是所谓的莫比乌斯反演。

例如,\(P2398\)

这题可以用调和级数求出\(gcd=k\)的对数,也可以转化为\(\sum_{i=1}^ni(2\sum_{j=1}^{n/i}\varphi(j)-1)\),但我们不这么干。

运用莫反,\(ans=\sum_{d=1}^n\varphi(d)\lfloor n/d\rfloor^2\),预处理\(\mu\),复杂度\(O(n)\)

像这样,一些更高级的数论问题就解决了。

关于\(lcm\)的事情

\(P1829\)为例。

\(lcm\)化回\(gcd\),原式\(=\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{gcd(i,j)}\)。设\(f(n)=\frac{1}{n}\),则\(g(n)\)可以求出为\((1-p_1)(1-p_2)...(1-p_k)/n(n=p_1^{e_1}p_2^{e_2}...p_k^{e_k})\),原式等于\(\sum_dg(d)d^2s(n/d)s(m/d)\),其中\(s(n)\)表示\(1\sim n\)的和。发现\(g(d)d^2\)是整数,于是设\(g(d)d^2=h(d)\),我们只需预处理\(h(d)\)即可,复杂度\(O(n)\)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询