数论分块
数论分块可以在 O(N) 的时间复杂度求出以下式子的值:
i=1∑n⌊in⌋
通过打表发现,有许多 ⌊in⌋ 的值是相同的且呈块状分布,设一段相同的值起始位置为 l ,则其终止位置为
⌊⌊in⌋n⌋
证明:
令 p=⌊ln⌋,则 n=lp+c
若存在 Δ∈N,使得 ⌊l+Δn⌋=p,则 n=(l+Δ)p+c′
∴lp+c=(l+Δ)p+c′
lp+clp+ccΔpΔ=(l+Δ)p+c′=lp+Δp+c′=Δp+c′=c−c′=pc−pc′
显然,Δmax=⌊pc⌋
∴r=l+⌊pc⌋=⌊ppl+pc⌋=⌊pn−pl+pl⌋=⌊⌊in⌋n⌋
所以每个块的区间为:[l,⌊⌊in⌋n⌋]可以一直不断地跳区间即可
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); }
|
一些常见积性函数(务必记住一下函数的符号记法)
- 常数函数
- 单位函数: ε (下文提及)
- 恒等函数: id(n)=n
- 欧拉函数: φ(n)=∑i=1n[gcd(i,n)=1] (不会证明其为积性函数的建议去重修欧拉函数)
- 除数函数1:d(n)=∑d∣n1 (就是 n 约数个数,根据定义证明即可)
- 除数函数2:σ(n)=∑d∣nd )(n 约数和,根据定义证明即可)
- 莫比乌斯函数 w(n) 为 n 本质不同质因子个数(就是有多少个不同的质因子)
狄利克雷卷积
对于两个数论函数 f(x) 与 g(x),定义其狄利克雷卷积的结果 h(x) 为:
h(x)=d∣x∑f(d)g(dn)
简记为:h=f∗g
显然,狄利克雷卷积满足一下性质:
交换律 :f∗g=g∗f
结合律:(f∗g)∗h=f∗(g∗h)
分配律 : (f+g)∗h=f∗h+g∗h
狄利克雷卷积运算的单位元:
ε 函数是狄利克雷卷积运算的单位元,即对于任意的数论函数 f,都有 f∗ε=f
通过简单手算可知,ε(n)=[n=1]
一些简单却非常重要的卷积例子:
我们将详细地给出下面四个例子的证明
1) 证:
∑d∣nμ(d) 在 n=1 时显然等于 ε(1),我们来证明在 n>1 时上式定为 0
由算术基本定理(唯一分解定理)可得:
n=p1k1×p2k2×...×pmkm
则有:
d=i=1∏mpici , ci∈[0,ki] and c∈N
其实就因为 d 是 n 的因数,所以每一个 d 定可以从 n 的质因子中选出一坨相乘来表示
根据莫比乌斯函数的定义,如果 d 选取的质数中出现一个质数的指数 ci 大于等于 2,则说明其有一个完全平方数因子,则 μ(d) 的值为 0,对 ∑d∣n 的贡献为 0 。
由此可知,对 ∑d∣n 有贡献的 ci 的值定为 0 或 1 ,那么在 m 个质数中,每个质数的指数只有两种取值,总的来说共有 2m 种取值。显然,∑i=1mci 的值有一半为奇数,有一半为偶数,再结合莫比乌斯函数的定义来看,正负相抵,总的值也就为 0
证毕。
2) 式过于简单,证明略
3) 式过于简单,证明略
4) 证:
欧拉函数性质: n=∑d∣nφ(d)
令f(n)=∑d∣nφ(d),我们来证明 f 为积性函数
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 的互质,所以 d×d′ 其实上枚举了 n×m 的所有因数
综上可知,f 为积性函数
由算数基本定理得:
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=1∏kf(pici)=i=1∏kpici=n∴n=d∣n∑φ(d)
n=d∣n∑φ(d)⟺φ∗1=id∴id∗μid∗μid∗μ=φ∗1∗μ=φ∗ε=φ
证毕。