n条公式:
基本转化
-
[n=1]=∑d|nμ(d)
-
n=∑d|nϕ(d)
-
ϕ(n)=∑d|nμ(d)nd
-
[gcd(a,b)=d]=[d|a][d|b][gcd(ad,bd)=1]
-
gcd(a,b)=∑dϕ(d)[d|a][d|b]==∑d[d|a][d|b]∑d′|dμ(d′)dd′
- (2016.10.22 update)
1gcd(a,b)=∑d[d|a][d|b]∑d′|dμ(d′)d′d( μ 真的只是一个容斥系数而已啊qwq)
-
[n|i×j]=[ngcd(n,i)|j]
求和式
-
∑1≤i≤n[d|i]=⌊nd⌋
-
∑1≤i≤ngcd(i,n)=∑d|nϕ(d)nd
-
∑1≤i≤n[gcd(i,n)=1]=∑d|nμ(d)nd=ϕ(n)
-
∑1≤i≤n[gcd(i,n)=1]×i=n(ϕ(n)+[n=1])2
-
∑1≤i≤n∑1≤j≤mgcd(i,j)=∑dϕ(d)⌊nd⌋⌊md⌋
-
∑1≤i≤n∑1≤j≤m[gcd(i,j)=1]=∑dμ(d)⌊nd⌋⌊md⌋
-
∑1≤i≤n∑1≤j≤mgcd(i,j)k=∑D⌊nD⌋⌊mD⌋∑d|Ddkμ(Dd)
-
∑1≤i≤nlcm(i,n)=n∑d|nd(ϕ(d)+[d=1])2
-
∑d∑d′f(dd′)=∑D∑d′|Df(D)
-
Fn=∑1≤i≤nfn=∑1≤i≤n∑d|ifd−∑2≤i≤nF⌊nk⌋满足左边可以快速计算下,对 n≤N23 暴力计算,否则递归计算,复杂度降到 N23 (注意递归需要记忆化。。)
- (2016.5.9 update)给定
F(n)=∑1≤i≤nf(n)其中f(n)=∑d|n,d<nf(d)则通过对第二式两边求和,化简,可得F(n)=∑2≤i≤nF(⌊ni⌋)分段记忆化算 Fn ,可以证明是 O(n34) 复杂度的(通过分 n√ 求和,换积分算上界可得)(这里推的时候可能会有个转化的坑,即注意 d 与
n/d 的转化) - (2016.10.22 update)
∑1≤d≤nμ(d)⌊nd⌋2=∑1≤i≤n∑1≤j≤n[gcd(i,j)=1]=−1+∑1≤i≤n2ϕ(i)(倒推的思想)
- (2016.10.22 update)
∑1≤d≤nϕ(d)⌊nd⌋2=∑1≤i≤n∑1≤j≤ngcd(i,j)=∑d|nϕ(d)nd=ϕ∗Id(换成一个 O(nlogn) 求所有 f(n) 值的方法)
m个注意:
- 注意使用 d|n 的对称性,即 nd|n
- 注意推理过程中要十分注意多重
∑
的使用,如下例:
ϕ(n)======∑1≤i≤n[gcd(i,n)=1]∑1≤i≤n∑d|i∑d|nμ(d)∑d|n∑1≤i≤n∑d|iμ(d)∑d|n∑1≤i≤n[i=1]∑d|n1τ(n)
迷之推导错误在于 d 是同一个!换句话说:
∑1≤i≤10∑1≤i≤201===∑1≤i≤1020=200∑i[1≤i≤10][1≤i≤20]=∑i[1≤i≤10]=10∑1≤i≤10[1≤i≤20]=10
其中第一行是错的,第二第三行是对的,也就是说其实两个 ∑ 中,变量只有一个,从而不能也不可能分布求和
通过使用[…]代替下标可以有效避免这种错误
k个新奇:
- 注意到积性函数强力性质可以降低复杂度。然而,其实如果函数满足
f(x)⇒f(px) 其中 p 为质数,能分p|n 与 p∤n 分别转移,就能通过在线性筛法上修改线性求解 - (2016.10.22 update)当问题给出一个
f(n)=∑d|ng(d)h(nd)
,求
F(n)=∑d|nf(n)
时,有个比较漂亮的推法是:
F(n)=f∗ϵ=g∗h∗ϵ
然后如果这个时候碰巧 h 又是个μ 或者 ϕ ,有: μ∗ϵ=ϕ , ϕ∗ϵ=id ,那么恭喜你,又 ∗ 算子满足交换律结合律,有
F(n)=g∗(h∗ϵ)=g∗ϕorg∗Id
如果此时 g 又是个Id ,那么再次恭喜你
F(n)=Id∗Id=Id⋅τ
附上推演式:https://en.wikipedia.org/wiki/Dirichlet_convolution - 3.