数论分块

发布时间 2023-12-07 20:52:19作者: Imcaigou

前言

数论分块我实际上在2021年的暑假就已经接触过了,当时是当成了定理来记,所以现在忘得也差不多了。

最近决定重温(从零开始重修)数论分块,利用坐地铁的时间看了几篇关于数论分块的博客文章(源自《洛谷日报》),感觉有些讲得不是非常详细,质量参差不齐。有些往往只放几个性质,然后将结论直接写在下面。这种书写方式首先忽略了思维引导的过程,其次也没有将推导过程讲清楚。于是借此我也进行一些补充,把作为数论小白的理解心得写得稍微详细一些。

问题简化

\(\sum_{i=1}^{n} \lfloor \frac{n}{i} \rfloor\)

性质

性质0

\(x,y\) 为任意实数。

显然,\(x\) 满足 \(\lfloor x \rfloor \leq x\)

显然,\(x,y\) 满足若\(x \leq y\),则有 \(\lfloor x \rfloor \leq \lfloor y \rfloor\)

性质1

对于一个 \(i\) 满足 \(1 \leq i \leq n\),则有且仅有一个包含 \(i\) 的连续区间 \([l,r]\) 满足对于其中任一整数 \(j\) 都有 \(\lfloor \frac{n}{i} \rfloor = \lfloor \frac{n}{j} \rfloor\),这里记为一个同商块。

证:

分析 \(y = \frac{n}{x}\) 在正数部分的图像会发现这是一个反比例函数,性质显然。

性质2

对区间 \([1,n]\) 一定只存在 \(2 \sqrt{n}\)\((2 \sqrt{n} - 1)\) 个不同且连续、长度递增的同商块。

证:

见此博客文章

这是我几个月前在网上翻到的,真的写得挺好的。

此文章甚至提出了另一种解决此问题的方法,但这里不再说了。

性质3

\[\lfloor \frac{n}{i} \rfloor = \lfloor \frac{n}{\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor} \rfloor \]

\(i\)\(\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor\) 一定在同一个同商块中。

证:

\[\because \lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor \leq \frac{n}{\lfloor \frac{n}{i} \rfloor} \]

\[\therefore \frac{n}{\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor} \geq \frac{n}{\frac{n}{\lfloor \frac{n}{i} \rfloor}} \]

\[\therefore \frac{n}{\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor} \geq \lfloor \frac{n}{i} \rfloor \]

\[\therefore \lfloor \frac{n}{\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor} \rfloor \geq \lfloor \frac{n}{i} \rfloor \]

\[\because \lfloor \frac{n}{i} \rfloor \leq \frac{n}{i} \]

\[\therefore \frac{n}{\lfloor \frac{n}{i} \rfloor} \geq \frac{n}{\frac{n}{i}} \]

\[\therefore \frac{n}{\lfloor \frac{n}{i} \rfloor} \geq i \]

\[\therefore \lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor \geq \lfloor i \rfloor \]

\[\therefore \lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor \geq i \]

\[\therefore \frac{n}{\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor} \leq \frac{n}{i} \]

\[\therefore \lfloor \frac{n}{\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor} \rfloor \leq \lfloor \frac{n}{i} \rfloor \]

\[\because \begin{cases} \lfloor \frac{n}{\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor} \rfloor \geq \lfloor \frac{n}{i} \rfloor \\ \lfloor \frac{n}{\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor} \rfloor \leq \lfloor \frac{n}{i} \rfloor \\ \end{cases} \]

\[\therefore \lfloor \frac{n}{\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor} \rfloor = \lfloor \frac{n}{i} \rfloor \]

性质4

\[i \leq \frac{n}{\lfloor \frac{n}{i} \rfloor} \]

即 $ \lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor $ 一定是包含 \(i\) 的同商块的右端点。

证:

\[\because \lfloor \frac{n}{i} \rfloor \leq \frac{n}{i} \]

\[\therefore \frac{n}{\lfloor \frac{n}{i} \rfloor} \geq \frac{n}{\frac{n}{i}} \]

\[\therefore \frac{n}{\lfloor \frac{n}{i} \rfloor} \geq i \]

\[\therefore \lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor \geq \lfloor i \rfloor \]

\[\therefore \lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor \geq i \]

\[\therefore i \leq \lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor \]

具体实现

问题解决

\(i\)\(\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor\) 的所有值除 \(n\) 并向下取整的结果一定是相等的(性质1、3、4),因此直接计算每个同商块的贡献,因为最多只有 \(2 \sqrt{n}\)
个不同的同商块(性质2),而对于任意一个 \(i\) 我们都直到它所在同商块的右端点,所以可以直接枚举每个同商块,每次使 \(i\) 变为 \(\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor + 1\)

Code:

int Ans = 0;
for (int L = 1, R;L <= n;L = R + 1){
    R = n / (n / L);
    Ans = (Ans + (R - L + 1) * (n / L) % mod) % mod;
}
return Ans;

问题衍生

二维数论分块,感兴趣的可以自己去查,这里不说了。

例题

洛谷题单