前置知识1:整除分块
① : ⌊ a b c ⌋ = ⌊ ⌊ a b ⌋ c ⌋ ①:\lfloor \dfrac{a}{bc} \rfloor = \lfloor \dfrac{\lfloor \dfrac{a}{b} \rfloor}{c} \rfloor ①:⌊bca⌋=⌊c⌊ba⌋⌋
证明:
a b = ⌊ a b ⌋ + r , r ∈ [ 0 , 1 ) \dfrac{a}{b}=\lfloor \dfrac{a}{b}\rfloor + r,r\in[0,1) ba=⌊ba⌋+r,r∈[0,1)
⌊ a b c ⌋ = ⌊ a b ⋅ 1 c ⌋ \lfloor \dfrac{a}{bc} \rfloor = \lfloor \dfrac{a}{b} ·\dfrac{1}{c} \rfloor ⌊bca⌋=⌊ba⋅c1⌋
= ⌊ 1 c ⋅ ( ⌊ a b ⌋ + r ) ⌋ =\lfloor \dfrac{1}{c}·(\lfloor \dfrac{a}{b}\rfloor + r)\rfloor =⌊c1⋅(⌊ba⌋+r)⌋
= ⌊ ⌊ a b ⌋ c + r c ⌋ =\lfloor \dfrac{\lfloor \dfrac{a}{b} \rfloor}{c}+\dfrac{r}{c} \rfloor =⌊c⌊ba⌋+cr⌋
∵ r < c \because r<c ∵r<c
∴ ⌊ ⌊ a b ⌋ c + r c ⌋ = ⌊ ⌊ a b ⌋ c ⌋ \therefore \lfloor \dfrac{\lfloor \dfrac{a}{b} \rfloor}{c}+\dfrac{r}{c} \rfloor=\lfloor \dfrac{\lfloor \dfrac{a}{b} \rfloor}{c} \rfloor ∴⌊c⌊ba⌋+cr⌋=⌊c⌊ba⌋⌋
② : i ∈ [ 1 , n ] , ∣ ⌊ n i ⌋ ∣ ≤ 2 n ②:i \in [1,n],|\lfloor \dfrac{n}{i}\rfloor| \le 2 \sqrt{n} ②:i∈[1,n],∣⌊in⌋∣≤2n
证明:
当 i ∈ [ 1 , ⌊ n ⌋ ] i \in[1,\lfloor \sqrt n\rfloor] i∈[1,⌊n⌋] 时, ⌊ n i ⌋ \lfloor \dfrac{n}{i} \rfloor ⌊in⌋有 ⌊ n ⌋ \lfloor \sqrt n\rfloor ⌊n⌋种取值
当 i ∈ ( ⌊ n ⌋ , n ] i\in(\lfloor \sqrt n\rfloor, n] i∈(⌊n⌋,n] 时, ⌊ n i ⌋ ≤ ⌊ n ⌋ \lfloor \dfrac{n}{i} \rfloor\le \lfloor \sqrt n\rfloor ⌊in⌋≤⌊n⌋,有 ⌊ n ⌋ \lfloor \sqrt n\rfloor ⌊n⌋种取值
③ : ③: ③: 对 ⌊ n i ⌋ \lfloor\dfrac{n}{i}\rfloor ⌊in⌋ 求和, ∀ i ∈ [ 1 , n ] \forall i\in[1,n] ∀i∈[1,n] 只需要找到最大的一个 j ( i ≤ j ≤ n ) j(i \le j \le n) j(i≤j≤n),使得 ⌊ n i ⌋ = ⌊ n j ⌋ \lfloor\dfrac{n}{i}\rfloor=\lfloor\dfrac{n}{j}\rfloor ⌊in⌋=⌊jn⌋,此时 j = ⌊ n ⌊ n j ⌋ ⌋ j=\lfloor\dfrac{n}{\lfloor\dfrac{n}{j}\rfloor}\rfloor j=⌊⌊jn⌋n⌋
证明:
先证明
j
≥
i
j \ge i
j≥i:
⌊
n
i
⌋
≤
n
i
\lfloor \dfrac{n}{i}\rfloor \le \dfrac{n}{i}
⌊in⌋≤in
⇔ ⌊ n ⌊ n i ⌋ ⌋ ≥ ⌊ n n i ⌋ = ⌊ i ⌋ = i \Leftrightarrow \lfloor\dfrac{n}{\lfloor\dfrac{n}{i}\rfloor}\rfloor \ge \lfloor\dfrac{n}{\dfrac{n}{i}}\rfloor = \lfloor i \rfloor=i ⇔⌊⌊in⌋n⌋≥⌊inn⌋=⌊i⌋=i
⇔ i ≤ ⌊ n ⌊ n i ⌋ ⌋ = j \Leftrightarrow i \le \lfloor\dfrac{n}{\lfloor\dfrac{n}{i}\rfloor}\rfloor =j ⇔i≤⌊⌊in⌋n⌋=j
再证明最大值
设
k
=
⌊
n
i
⌋
k=\lfloor\dfrac{n}{i}\rfloor
k=⌊in⌋,则
k ≤ n j < k + 1 k \le \dfrac{n}{j} <k + 1 k≤jn<k+1
1 k + 1 < j n ≤ 1 k \dfrac{1}{k + 1} < \dfrac{j}{n} \le \dfrac{1}{k} k+11<nj≤k1
n k + 1 < j ≤ n k \dfrac{n}{k + 1} < j \le \dfrac{n}{k} k+1n<j≤kn
因为 j j j 是整数,所以最大值为 ⌊ n k ⌋ \lfloor \dfrac{n}{k}\rfloor ⌊kn⌋
所以每次将 [ i , j ] [i,j] [i,j] 分为一块求解累加到答案上
代码:
for (int l = 1, r; l <= n; l = r + 1) {
r = n / (n / l);
res += (r - l + 1) * (n / l);
}
前置知识2:莫比乌斯函数
定义:
设
n
=
p
1
c
1
⋯
p
k
c
k
n=p_1^{c_1}\cdots p_k^{c_k}
n=p1c1⋯pkck
μ
(
n
)
=
{
0
,
∃
i
∈
[
1
,
k
]
,
c
i
>
1
1
,
k
≡
0
(
m
o
d
2
)
,
∀
i
∈
[
1
,
k
]
,
c
i
=
1
−
1
,
k
≡
1
(
m
o
d
2
)
,
∀
i
∈
[
1
,
k
]
,
c
i
=
1
\mu(n)=\begin{cases} 0,&\exists i \in[1,k],c_i >1 \\ 1,&k \equiv 0\pmod2,\forall i \in[1,k],c_i=1\\ -1,&k\equiv1\pmod2,\forall i\in [1,k],c_i=1 \end{cases}
μ(n)=⎩⎪⎨⎪⎧0,1,−1,∃i∈[1,k],ci>1k≡0(mod2),∀i∈[1,k],ci=1k≡1(mod2),∀i∈[1,k],ci=1
性质:
∑ d ∣ n μ ( d ) = { 1 , n = 1 0 , n > 1 \sum_{d|n}\mu(d) = \begin{cases} 1,&n=1\\ 0,&n>1 \end{cases} d∣n∑μ(d)={1,0,n=1n>1
证明:
取 n = ∏ i = 1 k p i 取n=\prod_{i=1}^{k}p_i 取n=i=1∏kpi
∑ d ∣ n μ ( d ) = ∑ i = 0 k C k i ⋅ ( − 1 ) i \sum_{d|n}\mu(d)=\sum_{i=0}^{k}C_{k}^{i}·(-1)^i d∣n∑μ(d)=i=0∑kCki⋅(−1)i
= ( 1 + ( − 1 ) ) k = 0 ( 二 项 式 定 理 ) =(1+(-1))^k=0(二项式定理) =(1+(−1))k=0(二项式定理)
线性筛莫比乌斯函数:
void get_mobius(int n) {
mobius[1] = 1;
for (int i = 2; i <= n; i ++) {
if (!st[i]) {
primes[cnt ++] = i;
mobius[i] = -1;
}
for (int j = 0; primes[j] * i <= n; j ++) {
int t = primes[j] * i;
st[t] = 1;
if (i % primes[j] == 0) {
mobius[t] = 0;
break;
}
mobius[t] = -mobius[i];
}
}
}
莫比乌斯反演:
设 f ( n ) , g ( n ) f(n),g(n) f(n),g(n) 为两个数论函数
形式一:
如果
f ( n ) = ∑ d ∣ n g ( d ) f(n)=\sum_{d|n}g(d) f(n)=d∣n∑g(d)
则有
g ( n ) = ∑ d ∣ n μ ( d ) f ( n d ) g(n)=\sum_{d|n}\mu(d)f(\dfrac{n}{d}) g(n)=d∣n∑μ(d)f(dn)
证明:
将
f ( n ) = ∑ d ∣ n g ( d ) f(n)=\sum_{d|n}g(d) f(n)=d∣n∑g(d)
带入
∑ d ∣ n μ ( d ) f ( n d ) \sum_{d|n}\mu(d)f(\dfrac{n}{d}) d∣n∑μ(d)f(dn)
得
∑ d ∣ n μ ( d ) ∑ k ∣ n d g ( k ) \sum_{d|n}\mu(d)\sum_{k \mid \frac{n}{d}}g(k) d∣n∑μ(d)k∣dn∑g(k)
交换求和次序:
因为
k
∣
n
d
k \mid \dfrac{n}{d}
k∣dn ,那么
k
k
k 也是
n
n
n 的因子,所以枚举
n
n
n 的所有因子
d
d
d 等价于枚举
k
k
k,
k
∣
n
d
=
d
∣
n
k
k \mid \dfrac{n}{d}=d \mid \dfrac{n}{k}
k∣dn=d∣kn
所以
∑ k ∣ n g ( k ) ∑ d ∣ n k μ ( d ) \sum_{k|n}g(k)\sum_{d|\frac{n}{k}}\mu(d) k∣n∑g(k)d∣kn∑μ(d)
根据 ∑ d ∣ n μ ( d ) = [ n = 1 ] \sum_{d \mid n}\mu(d)=[n=1] ∑d∣nμ(d)=[n=1]
所以 n = k n=k n=k,所以
∑ k ∣ n g ( k ) ∑ d ∣ n k μ ( d ) = g ( n ) \sum_{k|n}g(k)\sum_{d \mid \frac{n}{k}}\mu(d)=g(n) k∣n∑g(k)d∣kn∑μ(d)=g(n)
证毕。
形式二(常用):
如果
f ( n ) = ∑ n ∣ d g ( d ) f(n)=\sum_{n|d}g(d) f(n)=n∣d∑g(d)
则有
g ( n ) = ∑ n ∣ d μ ( d n ) f ( d ) g(n)=\sum_{n|d}\mu(\dfrac{d}{n})f(d) g(n)=n∣d∑μ(nd)f(d)
证明:
将
f ( n ) = ∑ n ∣ d g ( d ) f(n)=\sum_{n|d}g(d) f(n)=n∣d∑g(d)
带入
∑ n ∣ d μ ( d n ) f ( d ) \sum_{n|d}\mu(\dfrac{d}{n})f(d) n∣d∑μ(nd)f(d)
得
∑ n ∣ d μ ( d n ) ∑ d ∣ k g ( k ) \sum_{n|d}\mu(\dfrac{d}{n})\sum_{d|k}g(k) n∣d∑μ(nd)d∣k∑g(k)
交换求和次序:
∑ n ∣ k g ( k ) ∑ d n ∣ k n μ ( d n ) \sum_{n|k}g(k)\sum_{\frac{d}{n}|\frac{k}{n}}\mu(\dfrac{d}{n}) n∣k∑g(k)nd∣nk∑μ(nd)
根据 ∑ d ∣ n μ ( d ) = [ n = 1 ] \sum_{d|n}\mu(d)=[n=1] ∑d∣nμ(d)=[n=1]
所以 n = k n=k n=k,所以
∑ n ∣ k g ( k ) ∑ d n ∣ k n μ ( d n ) = g ( n ) \sum_{n|k}g(k)\sum_{\frac{d}{n} \mid \frac{k}{n}}\mu(\dfrac{d}{n})=g(n) n∣k∑g(k)nd∣nk∑μ(nd)=g(n)
证毕。
反演技巧
∑ i = 1 n f ( i ) ∑ j = 1 m g ( j ) = ∑ j = 1 m g ( j ) ∑ i = 1 n f ( i ) \sum_{i=1}^{n} f(i) \sum_{j=1}^{m}g(j)=\sum_{j=1}^{m}g(j)\sum_{i=1}^{n}f(i) i=1∑nf(i)j=1∑mg(j)=j=1∑mg(j)i=1∑nf(i)
∑ i = 1 n f ( i ) ∑ d ∣ i m g ( d ) = ∑ d = 1 n g ( d ) ∑ i = 1 ⌊ n d ⌋ f ( i d ) \sum_{i=1}^{n} f(i) \sum_{d \mid i}^{m}g(d)=\sum_{d=1}^{n}g(d)\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}f(id) i=1∑nf(i)d∣i∑mg(d)=d=1∑ng(d)i=1∑⌊dn⌋f(id)