欧拉函数通项
ϕ
(
n
)
=
n
∏
p
(
1
−
1
p
)
\phi(n) =n\prod_{p}(1-\frac{1}{p})
ϕ(n)=np∏(1−p1)
莫比乌斯
g
(
m
)
=
∑
d
∣
m
f
(
d
)
⟺
f
(
m
)
=
∑
d
∣
m
μ
(
d
)
∗
g
(
m
/
d
)
g(m) = \sum_{d|m}f(d) \iff f(m)=\sum_{d|m}\mu(d)*g(m/d)
g(m)=d∣m∑f(d)⟺f(m)=d∣m∑μ(d)∗g(m/d)
g
(
d
)
=
∑
d
∣
k
f
(
k
)
⟺
f
(
d
)
=
∑
d
∣
k
μ
(
k
/
d
)
∗
g
(
k
)
g(d)=\sum_{d|k}f(k)\iff f(d)=\sum_{d|k}\mu(k/d)*g(k)
g(d)=d∣k∑f(k)⟺f(d)=d∣k∑μ(k/d)∗g(k)
莫比乌斯函数
常用公式
- [ m = = 1 ] = ∑ d ∣ m μ ( d ) [m==1] = \sum_{d|m}\mu(d) [m==1]=∑d∣mμ(d)
杜教筛
复杂度 O ( n 2 / 3 ) O(n^{2/3}) O(n2/3)
常见形式
设
f
(
n
)
f(n)
f(n) 为数论函数,计算
S
(
n
)
=
∑
i
=
1
n
f
(
i
)
S(n)=\sum_{i=1}^nf(i)
S(n)=i=1∑nf(i)
根据
f
(
n
)
f(n)
f(n) 的性质,构造
S
(
n
)
S(n)
S(n) 关于
S
(
⌊
n
i
⌋
)
S(\lfloor \frac{n}{i} \rfloor)
S(⌊in⌋) 的递推式,找到一个
g
(
x
)
g(x)
g(x)
∑
i
=
1
n
∑
d
∣
i
f
(
d
)
g
(
i
d
)
=
∑
i
=
1
n
g
(
i
)
S
(
⌊
n
i
⌋
)
\sum_{i=1}^n\sum_{d|i}f(d)g(\frac{i}{d})=\sum_{i=1}^ng(i)S(\lfloor \frac{n}{i} \rfloor)
i=1∑nd∣i∑f(d)g(di)=i=1∑ng(i)S(⌊in⌋)
可以的到递推式
g
(
1
)
S
(
n
)
=
∑
i
=
1
n
(
f
∗
g
)
(
i
)
−
∑
i
=
2
n
g
(
i
)
S
(
⌊
n
i
⌋
)
g(1)S(n)=\sum_{i=1}^n(f*g)(i)-\sum_{i=2}^ng(i)S(\lfloor \frac{n}{i} \rfloor)
g(1)S(n)=i=1∑n(f∗g)(i)−i=2∑ng(i)S(⌊in⌋)
当可以对
(
f
∗
g
)
(
i
)
(f*g)(i)
(f∗g)(i) 以及
g
(
i
)
g(i)
g(i) 快速求和时 就能做了
然后预处理出前
n
2
/
3
n^{2/3}
n2/3 个
f
(
i
)
f(i)
f(i) 可以加快复杂度到
O
(
n
2
/
3
)
O(n^{2/3})
O(n2/3)
后
1
/
3
1/3
1/3 hash并不用map,注意到这个数部分肯定是某个
n
/
i
n/i
n/i ,我们只要按i来存就可以了
常用公式
- ∑ i = 1 n ∑ d ∣ i g ( i / d ) f ( d ) = ∑ i = 1 n g ( i ) ∑ d = 1 ⌊ n / d ⌋ f ( d ) \sum_{i=1}^{n}\sum_{d|i}g(i/d)f(d)=\sum_{i=1}^{n}g(i)\sum_{d=1}^{\lfloor n/d \rfloor}f(d) ∑i=1n∑d∣ig(i/d)f(d)=∑i=1ng(i)∑d=1⌊n/d⌋f(d)