前置知识1:整除分块

① : ⌊ a b c ⌋ = ⌊ ⌊ a b ⌋ c ⌋ ①:\lfloor \dfrac{a}{bc} \rfloor = \lfloor \dfrac{\lfloor \dfrac{a}{b} \rfloor}{c} \rfloor :bca=cba

证明:

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=bac1

= ⌊ 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 =cba+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 cba+cr=cba

② : i ∈ [ 1 , n ] , ∣ ⌊ n i ⌋ ∣ ≤ 2 n ②:i \in [1,n],|\lfloor \dfrac{n}{i}\rfloor| \le 2 \sqrt{n} :i[1,n],in2n

证明:

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 inn ,有 ⌊ 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(ijn),使得 ⌊ 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=jnn

证明:
先证明 j ≥ i j \ge i ji
⌊ n i ⌋ ≤ n i \lfloor \dfrac{n}{i}\rfloor \le \dfrac{n}{i} inin

⇔ ⌊ 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 inninn=i=i

⇔ i ≤ ⌊ n ⌊ n i ⌋ ⌋ = j \Leftrightarrow i \le \lfloor\dfrac{n}{\lfloor\dfrac{n}{i}\rfloor}\rfloor =j iinn=j

再证明最大值
k = ⌊ n i ⌋ k=\lfloor\dfrac{n}{i}\rfloor k=in,则

k ≤ n j < k + 1 k \le \dfrac{n}{j} <k + 1 kjn<k+1

1 k + 1 < j n ≤ 1 k \dfrac{1}{k + 1} < \dfrac{j}{n} \le \dfrac{1}{k} k+11<njk1

n k + 1 < j ≤ n k \dfrac{n}{k + 1} < j \le \dfrac{n}{k} k+1n<jkn

因为 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=p1c1pkck
μ ( 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>1k0(mod2),i[1,k],ci=1k1(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} dnμ(d)={ 1,0,n=1n>1

证明:

取 n = ∏ i = 1 k p i 取n=\prod_{i=1}^{k}p_i n=i=1kpi

∑ 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 dnμ(d)=i=0kCki(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)=dng(d)

则有

g ( n ) = ∑ d ∣ n μ ( d ) f ( n d ) g(n)=\sum_{d|n}\mu(d)f(\dfrac{n}{d}) g(n)=dnμ(d)f(dn)

证明:

f ( n ) = ∑ d ∣ n g ( d ) f(n)=\sum_{d|n}g(d) f(n)=dng(d)

带入

∑ d ∣ n μ ( d ) f ( n d ) \sum_{d|n}\mu(d)f(\dfrac{n}{d}) dnμ(d)f(dn)

∑ d ∣ n μ ( d ) ∑ k ∣ n d g ( k ) \sum_{d|n}\mu(d)\sum_{k \mid \frac{n}{d}}g(k) dnμ(d)kdng(k)

交换求和次序:
因为 k ∣ n d k \mid \dfrac{n}{d} kdn ,那么 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} kdn=dkn

所以

∑ k ∣ n g ( k ) ∑ d ∣ n k μ ( d ) \sum_{k|n}g(k)\sum_{d|\frac{n}{k}}\mu(d) kng(k)dknμ(d)

根据 ∑ d ∣ n μ ( d ) = [ n = 1 ] \sum_{d \mid n}\mu(d)=[n=1] dnμ(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) kng(k)dknμ(d)=g(n)

证毕。

形式二(常用):

如果

f ( n ) = ∑ n ∣ d g ( d ) f(n)=\sum_{n|d}g(d) f(n)=ndg(d)

则有

g ( n ) = ∑ n ∣ d μ ( d n ) f ( d ) g(n)=\sum_{n|d}\mu(\dfrac{d}{n})f(d) g(n)=ndμ(nd)f(d)

证明:

f ( n ) = ∑ n ∣ d g ( d ) f(n)=\sum_{n|d}g(d) f(n)=ndg(d)

带入

∑ n ∣ d μ ( d n ) f ( d ) \sum_{n|d}\mu(\dfrac{d}{n})f(d) ndμ(nd)f(d)

∑ n ∣ d μ ( d n ) ∑ d ∣ k g ( k ) \sum_{n|d}\mu(\dfrac{d}{n})\sum_{d|k}g(k) ndμ(nd)dkg(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}) nkg(k)ndnkμ(nd)

根据 ∑ d ∣ n μ ( d ) = [ n = 1 ] \sum_{d|n}\mu(d)=[n=1] dnμ(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) nkg(k)ndnkμ(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=1nf(i)j=1mg(j)=j=1mg(j)i=1nf(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=1nf(i)dimg(d)=d=1ng(d)i=1dnf(id)