数论分块

数论分块可以在 O(N)O(\sqrt{N})​ 的时间复杂度求出以下式子的值:

∑i=1n⌊ni⌋\sum_{i=1}^{n}\lfloor{\frac{n}{i}}\rfloor

通过打表发现,有许多 ⌊ni⌋\lfloor{\frac{n}{i}}\rfloor​​ 的值是相同的且呈块状分布,设一段相同的值起始位置为 ll​​ ,则其终止位置为

⌊n⌊ni⌋⌋\lfloor{\frac{n}{\lfloor{\frac{n}{i}}\rfloor } }\rfloor

证明:

令 p=⌊nl⌋p=\lfloor{\frac{n}{l}}\rfloor​,则 n=lp+cn=lp+c​

若存在 Δ∈NΔ \in N​,使得 ⌊nl+Δ⌋=p\lfloor{\frac{n}{l+Δ}}\rfloor=p​,则 n=(l+Δ)p+c′n=(l+Δ)p+c'​

∴lp+c=(l+Δ)p+c′\therefore lp+c=(l+Δ)p+c'​

lp+c=(l+Δ)p+c′lp+c=lp+Δp+c′c=Δp+c′Δp=c−c′Δ=cp−c′p\begin{aligned} lp+c&=(l+Δ)p+c'\\ lp+c&=lp+Δp+c'\\ c&=Δp+c'\\ Δp&=c-c'\\ Δ&=\frac{c}{p}-\frac{c'}{p} \end{aligned}

显然,Δmax=⌊cp⌋Δ_{max}=\lfloor{\frac{c}{p}} \rfloor

∴r=l+⌊cp⌋=⌊plp+cp⌋=⌊n−pl+plp⌋=⌊n⌊ni⌋⌋\begin{aligned} \therefore r&=l+\lfloor{\frac{c}{p}} \rfloor\\ &=\lfloor{\frac{pl}{p}}+\frac{c}{p}\rfloor\\ &=\lfloor{\frac{n-pl+pl}{p}}\rfloor\\ &= \lfloor{\frac{n}{\lfloor{\frac{n}{i}}\rfloor } }\rfloor \end{aligned}

所以每个块的区间为:[l,⌊n⌊ni⌋⌋][l, \lfloor{\frac{n}{\lfloor{\frac{n}{i}}\rfloor } }\rfloor ]​可以一直不断地跳区间即可

code

1
2
3
4
for(int l=1,r;l<=n;l=r+1){
r=n/(n/l);
ans+=(r-l+1)*(n/l);
}

一些常见积性函数(务必记住一下函数的符号记法)

  • 常数函数
  • 单位函数: ε\varepsilon​ (下文提及)
  • 恒等函数: id(n)=nid(n)=n
  • 欧拉函数: φ(n)=∑i=1n[gcd(i,n)=1]\varphi(n)=\sum_{i=1}^n [gcd(i,n)=1]​ (不会证明其为积性函数的建议去重修欧拉函数)
  • 除数函数1:d(n)=∑d∣n1d(n)=\sum_{d|n}1 (就是 nn 约数个数,根据定义证明即可)
  • 除数函数22:σ(n)=∑d∣nd\sigma(n)=\sum_{d|n}d )(nn​ 约数和,根据定义证明即可)​
  • 莫比乌斯函数 w(n)w(n) 为 nn 本质不同质因子个数(就是有多少个不同的质因子)

狄利克雷卷积

对于两个数论函数 f(x)f(x) 与 g(x)g(x),定义其狄利克雷卷积的结果 h(x)h(x) 为:

h(x)=∑d∣xf(d)g(nd)h(x)=\sum_{d|x}f(d)g(\frac{n}{d})

简记为:h=f∗gh=f*g

显然,狄利克雷卷积满足一下性质:

交换律 :f∗g=g∗ff*g=g*f

结合律:(f∗g)∗h=f∗(g∗h)(f*g)*h=f*(g*h)

分配律 : (f+g)∗h=f∗h+g∗h(f+g)*h=f*h+g*h

狄利克雷卷积运算的单位元:

ε\varepsilon​​ 函数是狄利克雷卷积运算的单位元,即对于任意的数论函数 ff​,都有 f∗ε=ff*\varepsilon=f

通过简单手算可知,ε(n)=[n=1]\varepsilon(n)=[n=1]​

一些简单却非常重要的卷积例子:

我们将详细地给出下面四个例子的证明

1) 证:

∑d∣nμ(d)\sum_{d|n}\mu(d) 在 n=1n=1 时显然等于 ε(1)\varepsilon(1),我们来证明在 n>1n>1 时上式定为 00

由算术基本定理(唯一分解定理)可得:

n=p1k1×p2k2×...×pmkmn=p_1^{k_1}\times p_2^{k_2}\times...\times p_m^{k_m}​​

则有:

d=∏i=1mpici , ci∈[0,ki] and c∈Nd=\prod_{i=1}^{m}p_i^{c_i}\ ,\ c_i\in[0,k_i]\ and \ c\in N

其实就因为 dd 是 nn 的因数,所以每一个 dd 定可以从 nn 的质因子中选出一坨相乘来表示

根据莫比乌斯函数的定义,如果 dd 选取的质数中出现一个质数的指数 cic_i 大于等于 22,则说明其有一个完全平方数因子,则 μ(d)\mu(d) 的值为 00,对 ∑d∣n\sum_{d|n} 的贡献为 00 。

由此可知,对 ∑d∣n\sum_{d|n}​ 有贡献的 cic_i​​ 的值定为 00​ 或 11​ ,那么在 mm​ 个质数中,每个质数的指数只有两种取值,总的来说共有 2m2^m​ 种取值。显然,∑i=1mci\sum_{i=1}^{m} c_i​ 的值有一半为奇数,有一半为偶数,再结合莫比乌斯函数的定义来看,正负相抵,总的值也就为 00​

证毕。

2) 式过于简单,证明略

3)3) 式过于简单,证明略

4)4) 证:

欧拉函数性质: n=∑d∣nφ(d)n=\sum_{d|n} \varphi(d)

令f(n)=∑d∣nφ(d)f(n)=\sum_{d|n}\varphi(d),我们来证明 ff​​ 为积性函数

n,m∈N+,gcd(n,m)=1f(n)×f(m)=∑d∣nφ(d)×∑d′∣mφ(d′)=∑d∣n∑d′∣mφ(d)×φ(d′)=∑d∣n∑d′∣mφ(d×d′)=∑d′′∣nmφ(d′′)=f(nm)n,m\in\N_+,gcd(n,m)=1\\ \begin{aligned} f(n)\times f(m)&=\sum_{d|n}\varphi(d)\times \sum_{d'|m}\varphi(d') \\ &=\sum_{d|n}\sum_{d'|m}\varphi(d)\times \varphi(d')\\ &=\sum_{d|n}\sum_{d'|m}\varphi(d\times d')\\ &=\sum_{d''|nm}\varphi(d'')=f(nm) \end{aligned}

说一下等式变化的第三步,由于 n,mn,m 的互质,所以 d×d′d\times d' 其实上枚举了 n×mn\times m​​ 的所有因数

综上可知,ff 为积性函数

由算数基本定理得:

n=p1c1×p2c2×...×pkck∴f(n)=f(p1c1)×f(p2c2)×...×f(pkck)f(pk)=φ(1)+φ(p)+φ(p2)+..+φ(pk)=1+(p−1)+(p2−p)+...+(pk−pk−1)=pkn=∏i=1kf(pici)=∏i=1kpici=n∴n=∑d∣nφ(d)n=p_1^{c_1}\times p_2^{c_2}\times ...\times p_k^{c_k}\\ \therefore f(n)=f(p_1^{c_1})\times f(p_2^{c_2})\times ...\times f(p_k^{c_k})\\ f(p^k)=\varphi(1)+ \varphi(p)+ \varphi(p^2)+..+\varphi(p^k)=1+(p-1)+(p^2-p)+...+(p^k-p^{k-1})=p^k\\ n=\prod_{i=1}^k f(p_i^{c_i})=\prod_{i=1}^{k}p_{i}^{c_i}=n\\ \therefore n=\sum_{d|n}\varphi(d)

n=∑d∣nφ(d)⟺φ∗1=id∴id∗μ=φ∗1∗μid∗μ=φ∗εid∗μ=φn=\sum_{d|n}\varphi(d)\Longleftrightarrow \varphi*1=id\\ \begin{aligned} \therefore id*\mu&=\varphi*1*\mu\\ id*\mu&=\varphi*\varepsilon\\ id*\mu&=\varphi \end{aligned}

证毕。

Edited on Views times