前置技能点:
整除分块:
现在我们想求:
∑
i
=
1
n
⌊
n
i
⌋
\sum_{i=1}^n {\lfloor\frac{n}{i}\rfloor}
i=1∑n⌊in⌋
不妨先考虑
⌊
n
i
⌋
\lfloor \frac n i\rfloor
⌊in⌋的结果.
{
i
≤
n
,
i
只
有
n
种
可
能
,
所
以
⌊
n
i
⌋
也
只
有
n
种
可
能
i
>
n
,
虽
然
i
有
n
−
n
种
可
能
,
但
是
⌊
n
i
⌋
≤
n
所
以
⌊
n
i
⌋
也
只
有
n
中
可
能
\begin{cases} i \leq \sqrt{n},i只有\sqrt{n}种可能,所以\lfloor \frac n i \rfloor 也只有 \sqrt n 种可能 \\i \gt \sqrt n ,虽然i有 n-\sqrt n种可能,但是\lfloor \frac n i \rfloor \le \sqrt n 所以\lfloor \frac n i \rfloor也只有\sqrt n 中可能 \end{cases}
{i≤n,i只有n种可能,所以⌊in⌋也只有n种可能i>n,虽然i有n−n种可能,但是⌊in⌋≤n所以⌊in⌋也只有n中可能
既然如此,我们不妨根据 ⌊ n i ⌋ \lfloor \frac n i \rfloor ⌊in⌋ 分块,然后每一块统一计算大小,这样我们在 O ( n ) O\left ( \sqrt n \right ) O(n) 的复杂度下求解了.
积性函数:
积 性 函 数 f ( x ) 满 足 : 任 何 x , y , 如 果 g c d ( x , y ) = 1 , 则 f ( x y ) = f ( x ) f ( y ) 积性函数f(x)满足: 任何x,y,如果 gcd(x,y) =1,则 f( xy) = f(x)f(y) 积性函数f(x)满足:任何x,y,如果gcd(x,y)=1,则f(xy)=f(x)f(y)
性质:
如
果
f
(
x
)
,
g
(
x
)
为
积
性
函
数
,
p
为
常
数
,
则
:
如果f(x),g(x)为积性函数,p为常数,则:
如果f(x),g(x)为积性函数,p为常数,则:
h
(
x
)
=
f
p
(
x
)
h
(
x
)
=
f
(
x
p
)
h
(
x
)
=
f
(
x
)
g
(
x
)
h
(
x
)
=
∑
d
∣
x
f
(
d
)
g
(
x
d
)
\begin{aligned} h(x) &= f^p(x)\\ h(x) &= f(x^p)\\ h(x) &= f(x)g(x)\\ h(x) &= \sum_{d|x} f(d)g(\frac x d) \end{aligned}
h(x)h(x)h(x)h(x)=fp(x)=f(xp)=f(x)g(x)=d∣x∑f(d)g(dx)
h
(
x
)
均
为
积
性
函
数
h(x)均为积性函数
h(x)均为积性函数
常见的几个积性函数:
单 数 函 数 : ϵ ( n ) = [ n = = 1 ] ; 恒 等 函 数 : i d ( n ) = n ; 常 数 函 数 : 1 ( n ) = 1 ; 除 数 函 数 : σ k ( n ) = ∑ d ∣ n d k ; 如 果 k = 0 , 可 简 写 为 d ( n ) 欧 拉 函 数 : ϕ ( n ) = ∑ i = 1 n [ g c d ( i , j ) = = 1 ] ; 莫 比 乌 斯 函 数 : u ( n ) = { 1 n = 1 ( − 1 ) k k 为 n 的 不 同 素 因 子 个 数 , 且 每 个 素 因 子 只 拥 有 一 个 0 o t h e r w i s e \begin{aligned} 单数函数: \epsilon (n) &= [n==1];\\ 恒等函数: id(n) &= n;\\ 常数函数 :1(n) &= 1;\\ 除数函数: \sigma_{k}(n) &= \sum_{d|n} d^k;如果k=0,可简写为d(n)\\ 欧拉函数: \phi(n) &= \sum_{i=1}^n [gcd(i,j)==1];\\ 莫比乌斯函数:u(n) &= \begin{cases} 1 & n=1\\ (-1)^k & k为n的不同素因子个数,且每个素因子只拥有一个\\ 0 & otherwise\\ \end{cases} \end{aligned} 单数函数:ϵ(n)恒等函数:id(n)常数函数:1(n)除数函数:σk(n)欧拉函数:ϕ(n)莫比乌斯函数:u(n)=[n==1];=n;=1;=d∣n∑dk;如果k=0,可简写为d(n)=i=1∑n[gcd(i,j)==1];=⎩⎪⎨⎪⎧1(−1)k0n=1k为n的不同素因子个数,且每个素因子只拥有一个otherwise
Dirichlet卷积:
对
于
数
论
函
数
f
(
x
)
,
g
(
x
)
:
对于数论函数f(x),g(x):
对于数论函数f(x),g(x):
(
f
∗
g
)
n
=
∑
d
∣
n
f
(
d
)
g
(
⌊
n
d
⌋
)
(f*g)_{n} = \sum_{d|n} f(d)g(\lfloor \frac n d \rfloor)
(f∗g)n=d∣n∑f(d)g(⌊dn⌋)
卷 积 满 足 交 换 律 , 结 合 律 . 卷积满足交换律,结合律. 卷积满足交换律,结合律.
举例:
ϵ = u ∗ 1 d = 1 ∗ 1 σ = i d ∗ 1 ϕ = i d ∗ u \begin{aligned} \epsilon &=u * 1\\ d &= 1 * 1\\ \sigma &= id * 1\\ \phi &= id * u \end{aligned} ϵdσϕ=u∗1=1∗1=id∗1=id∗u
莫比乌斯函数:
u ( n ) = { 1 n = 1 ( − 1 ) k k 为 n 的 不 同 素 因 子 个 数 , 且 每 个 素 因 子 只 拥 有 一 个 0 o t h e r w i s e u(n) = \begin{cases} 1 & n=1\\ (-1)^k & k为n的不同素因子个数,且每个素因子只拥有一个\\ 0 & otherwise\\ \end{cases} u(n)=⎩⎪⎨⎪⎧1(−1)k0n=1k为n的不同素因子个数,且每个素因子只拥有一个otherwise
性
质
:
莫
比
乌
斯
函
数
不
仅
是
积
性
函
数
,
且
满
足
∑
d
∣
n
u
(
d
)
=
{
1
n
=
1
0
n
≠
1
\begin{aligned}性质: 莫比乌斯函数不&仅是积性函数,且满足\\ \sum_{d|n} u(d) &= \begin{cases} 1 & n=1\\ 0 & n \neq 1\\ \end{cases}\\ \end{aligned}
性质:莫比乌斯函数不d∣n∑u(d)仅是积性函数,且满足={10n=1n=1
这
个
函
数
在
反
演
中
会
很
常
见
,
经
常
性
的
需
要
求
前缀和
o
r
O(1)查询
,
我
们
可
以
用
素
数
筛
O
(
n
)
预
处
理
.
准
确
的
来
说
,
所
有
的
积
性
函
数
都
可
以
通
过
素
数
筛
O
(
n
)
求
出
.
但
不
同
的
积
性
函
数
的
转
移
略
有
不
同
,
这个函数在反演中会很常见,经常性的需要求\ \textbf{前缀和} \ or \ \textbf{O(1)查询},我们可以用素数筛O(n)预处理.\\ ~\\ 准确的来说,所有的积性函数都可以通过素数筛O(n)求出.但不同的积性函数的转移略有不同,
这个函数在反演中会很常见,经常性的需要求 前缀和 or O(1)查询,我们可以用素数筛O(n)预处理. 准确的来说,所有的积性函数都可以通过素数筛O(n)求出.但不同的积性函数的转移略有不同,
void getMu() {
mu[1] = 1;
for (int i = 2; i <= n; ++i) {
if (!flg[i]) p[++tot] = i, mu[i] = -1;
for (int j = 1; j <= tot && i * p[j] <= n; ++j) {
flg[i * p[j]] = 1;
if (i % p[j] == 0) {
mu[i * p[j]] = 0; // 不同的积性函数可以这里会有差异.
break;
}
mu[i * p[j]] = -mu[i];
}
}
}
莫比乌斯反演:
若 f ( n ) = ∑ d ∣ n g ( d ) , 则 g ( n ) = ∑ d ∣ n u ( d ) f ( ⌊ n d ⌋ ) 若f(n) = \sum_{d|n} g(d), \\ 则g(n) = \sum_{d|n} u(d)f(\lfloor \frac n d \rfloor) 若f(n)=d∣n∑g(d),则g(n)=d∣n∑u(d)f(⌊dn⌋)
证明:
f
=
g
∗
1
两
边
同
时
卷
积
:
f
∗
u
=
g
∗
1
∗
u
利
用
结
合
律
:
f
∗
u
=
g
\begin{aligned}f &= g*1\\ 两边同时卷积:\qquad f*u &=g*1*u\\ 利用结合律: \qquad f*u &=g \end{aligned}
f两边同时卷积:f∗u利用结合律:f∗u=g∗1=g∗1∗u=g
反演结论:
[ g c d ( i , j ) = 1 ] ⟺ ∑ d ∣ g c d ( i , j ) u ( d ) 通 过 上 面 u ( n ) 的 定 义 , 显 然 这 个 式 子 是 成 立 的 [gcd(i,j)=1] \iff \sum_{d|gcd(i,j)} u(d) \\ ~\\ 通过上面u(n)的定义,显然这个式子是成立的 [gcd(i,j)=1]⟺d∣gcd(i,j)∑u(d) 通过上面u(n)的定义,显然这个式子是成立的