Loading

「学习笔记」数论分块

引入

给定 \(n \le 10^{10}\),求 \(\sum_{i = 1}^n \lfloor \frac{n}{i} \rfloor\)
我们可以想到枚举,但是 \(n \le 10^{10}\),你 \(T\) 飞了
怎么办呢?
我们先举几个小的例子,例如 \(n \le 10\)

\(i\) \(1\) \(2\) \(3\) \(4\) \(5\) \(6\) \(7\) \(8\) \(9\) \(10\)
\(\lfloor \frac{n}{i} \rfloor\) \(10\) \(5\) \(5\) \(2\) \(2\) \(1\) \(1\) \(1\) \(1\) \(1\)

相信看到这,你就发现了,这一整个数列被分成了若干段,每段的长度以及所代表的答案都不同,但是我们可以直接算出来,\(\lfloor \frac{n}{i} \rfloor\) 是这个答案所代表的值,\(\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor\) 是这个答案的块的右端点,\([l, r] = [l, \lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor]\)
下面是一些结论与推导
结论:\(\lfloor \frac{n}{i} \rfloor\) 最多有 \(2 \sqrt n\) 种不同的值
证明:
\(1\)、当 \(1 \le i \le \sqrt n\)\(i\)\(\sqrt n\) 种,所以 \(\lfloor \frac{n}{i} \rfloor\) 最多\(\sqrt n\) 种不同的值
\(2\)、当 \(i > \sqrt n\)\(1 \le \lfloor \frac{n}{i} \rfloor \le \sqrt n\)\(\lfloor \frac{n}{i} \rfloor\) 也最多有 \(\sqrt n\) 种不同的值
所以加起来,\(\lfloor \frac{n}{i} \rfloor\) 最多有 \(2 \sqrt n\) 种不同的值
\(\lfloor \frac{n}{i} \rfloor\) 最多有 \(2 \sqrt n\) 种不同的值,我们只需要找到每种值有多少个即可,就能在 \(O_{\sqrt n}\) 的时间复杂度内算出 \(\sum_{i = 1}^n \lfloor \frac{n}{i} \rfloor\) 的值
每种值的个数有多少个呢?
假设 \(\lfloor \frac{n}{i} \rfloor = k\),找出了多少个 \(i\),使得 \(\lfloor \frac{n}{i} \rfloor = k\)
\(\lfloor \frac{n}{s} \rfloor = k\)\(\lfloor \frac{n}{s'} \rfloor = k\)\(s\) 是满足 \(\lfloor \frac{n}{i} \rfloor = k\) 的最小值,\(s'\) 是满足 \(\lfloor \frac{n}{i} \rfloor = k\) 的最大值
\(s' = s + d\),所以 \(\lfloor \frac{n}{s} \rfloor = \lfloor \frac{n}{s + d} \rfloor = k\)
\(n = k \times s + p = k \times (s + d) + p'\quad (0 \le p < s, 0 \le p' < s + d)\)
\(k \times s + p = k \times (s + d) + p'\)
\(k \times d = p - p'\)
所以 \(d_{\max} = \lfloor \frac{p}{k} \rfloor\)
所以 \(s' = s + d_{\max}\)

\[\begin{aligned} s' & = s + d_{\max}\\ & = s + \lfloor \frac{p}{k} \rfloor\\ & = s + \lfloor \frac{n \% s}{\lfloor \frac{n}{s} \rfloor} \rfloor\\ & = s + \lfloor \frac{n - \lfloor \frac{n}{s} \rfloor s}{\lfloor \frac{n}{s} \rfloor} \rfloor\\ & = s + \lfloor \frac{n}{\lfloor \frac{n}{s} \rfloor} - s \rfloor\\ & = s + \lfloor \frac{n}{\lfloor \frac{n}{s} \rfloor} \rfloor - s\\ & = \lfloor \frac{n}{\lfloor \frac{n}{s} \rfloor} \rfloor \end{aligned} \]

所以 \(s' = \lfloor \frac{n}{\lfloor \frac{n}{s} \rfloor} \rfloor\)
有多少个数呢?
\(s' - s\)
\(End.\)

posted @ 2023-01-11 22:31  yi_fan0305  阅读(41)  评论(0编辑  收藏  举报