#012. 经典脑题 II:地球灌水与 2 的幂

脑筋急转弯板块知识地图:本章聚焦估算数论一支的量纲分析与几何级数方法

#学习目标:会估算,也要会对数

本章的两道源题表面毫不相干,骨架却是同一个。灌水题问的是「一个每秒翻倍的量要多久追上一个天文数字」,答案不在精确测量的第几位小数里,而在数量级的对数里;2 的幂问的是「乘法序列的首数字如何分布」,答案同样藏在 \(\log_{10}\) 的小数部分里。面试官用这两道题筛选的,是你面对离谱尺度时的量纲直觉(dimensional intuition)对数思维(logarithmic thinking):前者让你不被 \(10^{21}\) 吓住,后者让你把指数问题变成一次乘法。

这两套工具在量化工作里天天出现:仓位与收益的复利计算、订单流量的容量规划、数据规模估算,本质都是「增长率 × 时间 = 尺度」的对数方程。费米估算的系统训练在030 章还有一轮,本章先把最小版本做透。

量纲分析

先确认要求的是什么单位(立方米、秒),再决定需要哪些输入(地球体积、水龙头流量),最后每个输入只估数量级。

几何级数

每秒翻倍的量,累计约等于最后一项的两倍——答案几乎全部来自最后几秒,总时长由 \(\log_2(\text{目标}/\text{起点})\) 决定。

首数字 = 对数小数

一个数的首数字只由 \(\log_{10}\) 的小数部分决定;无理数的倍数小数部分稠密,于是 2 的幂可以以任何数字开头。

#知识点一:费米估算与量纲分析

费米估算(Fermi estimation)的流程是三步:要什么——写出目标量的量纲;缺什么——把目标量分解成几个「可猜」的输入;差多少没关系——每个输入只保留 10 的幂,误差在乘法世界里互相抵消一部分,最终答案落在正确数量级就算赢。灌水题的目标量是时间,量纲是秒,于是:

\[ T \sim \frac{\text{地球体积 } (\mathrm{m}^3)}{\text{水龙头流量 } (\mathrm{m}^3/\mathrm{s})} \]

怎么读:体积除以流量得到「以初始流量恒定灌满」的时间量级,翻倍机制会在下一步把这个量级压缩成它的对数。地球是半径 \(R \approx 6.4 \times 10^6\) 米的球:

\[ V = \tfrac{4}{3}\pi R^3 \approx \tfrac{4}{3} \times 3.1 \times (6.4 \times 10^6)^3 \approx 1.1 \times 10^{21}\ \mathrm{m}^3 \]

日常水龙头开到正常大小约每秒 0.01 到 0.1 升,即 \(10^{-5}\) 到 \(10^{-4}\) 立方米每秒。别急着精确——下面会看到,这个因子差 10 倍只让最终答案移动约 3 秒。

数量级就是答案

费米估算的评分标准是「差不超过一个数量级」。把每个输入写成 \(a \times 10^k\)、只带一位有效数字,是最快也最稳的做法;执着于第二位有效数字反而暴露你没抓住这类题的考点。

#知识点二:几何级数与对数时间

设第 1 秒流量为 \(r\),此后每秒翻倍,第 \(t\) 秒的流量是 \(r \cdot 2^{t-1}\)。到第 \(T\) 秒末的累计注水量是一个几何级数(geometric series):

\[ S(T) = r\left(1 + 2 + 4 + \cdots + 2^{T-1}\right) = r\left(2^{T} - 1\right) \approx 2 r\, 2^{T-1} \]

怎么读:翻倍序列的和约等于最后一项的两倍——前面所有项加起来只与最后一项同量级。结论是指数过程没有「平均速度」可言:总进度几乎全部来自最后一刻。令 \(S(T)\) 等于目标体积 \(V\),解出:

\[ 2^{T} \approx \frac{V}{r} \;\;\Longrightarrow\;\; T \approx \log_2\!\frac{V}{r} = \log_{10}\!\frac{V}{r} \times \log_2 10 \approx 3.32 \times \log_{10}\!\frac{V}{r} \]

怎么读:倍增过程的耗时是「目标与起点的比值」取以 2 为底的对数——比例每差 1000 倍,时间只多 \(\log_2 1000 \approx 10\) 秒。这就是对数时间(logarithmic time)的直觉:复利、病毒传播、核裂变链式反应的时间尺度都由它决定。对输入误差的敏感度也在这里:\(r\) 或 \(V\) 估错 10 倍,\(T\) 只移动 \(\log_2 10 \approx 3.3\) 秒。

#知识点三:首数字、稠密性与 Benford

一个正整数 \(N\) 的首数字是 9,当且仅当存在整数 \(k\) 使 \(9 \times 10^{k} \le N \lt 10^{k+1}\)。两边取以 10 为底的对数,条件变成关于 \(\log_{10} N\) 的小数部分的条件:

\[ \log_{10} 9 \le \left\{\log_{10} N\right\} \lt 1 \]

怎么读:首数字只看对数的小数部分落进 \([\log_{10} 1, \log_{10} 2)\)、\([\log_{10} 2, \log_{10} 3)\)、……中的哪一段,段长分别是 \(\log_{10} 2, \log_{10}(3/2), \dots, \log_{10}(10/9)\),逐段递减——这就是本福特定律(Benford's law)的来源:首数字为 \(d\) 的比例是:

\[ P(\text{首数字} = d) = \log_{10}\!\left(1 + \tfrac{1}{d}\right) \]

对 \(2^n\) 这类数,\(\log_{10} 2^{n} = n \log_{10} 2\),小数部分是 \(\{n\alpha\}\),其中 \(\alpha = \log_{10} 2\)。关键定理:若 \(\alpha\) 是无理数,则 \(\{n\alpha\}\) 在 \([0,1)\) 中稠密(Kronecker 定理),而且当 \(n\) 均匀跑过 \(1,\dots,N\) 时这些小数部分渐近均匀分布(equidistribution,Weyl 定理)。因此 \(2^n\) 的首数字会以 \(\log_{10}(10/9) \approx 4.6\%\) 的长期频率落在 9 上——不仅存在,而且无穷多个。

为什么无理数就有稠密性?给一个两行证明的思路:考察 \(0, \{\alpha\}, \{2\alpha\}, \dots, \{M\alpha\}\) 共 \(M+1\) 个点塞进 \([0,1)\),由鸽笼原理必有两点距离小于 \(1/M\),设为 \(\{(j-i)\alpha\} \lt 1/M\);把这个「小步长」\(\beta = \{(j-i)\alpha\}\) 反复累加,步长小于 \(1/M\) 的网格会铺满 \([0,1)\)——任何目标区间里迟早落进一个 \(\{n\alpha\}\)。无理性保证 \(\beta \ne 0\)(否则 \(\alpha\) 是有理数),步长不会退化。

无理性的小证明

\(\log_{10} 2\) 是无理数:若 \(\log_{10} 2 = a/b\)(正整数 \(a,b\)),则 \(10^{a} = 2^{b}\),左边含因子 5 而右边不含,矛盾。这个小论证面试可直接口述,是「存在以 9 开头的 2 的幂」的逻辑地基。

#例题详解一:给地球灌水要多久

例题 1:假设把地球挖空,顶部开孔,用一只日常水龙头往里灌水,流量每秒翻倍。大约多久能灌满地球?

建模。三件套:地球体积 \(V\)、初始流量 \(r\)、几何级数求和。目标是时间 \(T\),由 \(r(2^{T}-1) \approx V\) 解出。明确口径:本题要的是数量级与方法,不是精确秒数。

推导。第一步,地球体积:半径 \(R \approx 6.4 \times 10^{6}\) 米,

\[ V = \tfrac{4}{3}\pi R^{3} \approx 1.1 \times 10^{21}\ \mathrm{m}^3 \]

第二步,日常水龙头流量取 \(r \approx 10^{-5}\ \mathrm{m}^3/\mathrm{s}\)(每秒约 0.01 升的细流;开大些到 \(10^{-4}\) 也不影响结论,见检验)。第三步,几何级数:累计注水量 \(\approx 2r \cdot 2^{T-1} = r \cdot 2^{T}\),令其等于 \(V\):

\[ 2^{T} \approx \frac{10^{21}}{10^{-5}} = 10^{26} \;\;\Longrightarrow\;\; T \approx 26 \times \log_{2} 10 \approx 26 \times 3.32 \approx 86.4 \]

即大约 87 秒——一分半钟内灌满整个地球。若把流量当作连续函数用积分 \(\int_0^T r 2^t\,dt = r(2^T-1)/\ln 2\) 处理,只多出 \(\log_2(1/\ln 2) \approx 0.5\) 秒的修正,仍落在 86 到 87 秒之间。

检验。量纲:\(V/r\) 的单位是秒,取对数后仍是秒的量级,正确。敏感性:流量估错 10 倍(\(10^{-4}\) 对 \(10^{-5}\)),\(T\) 只变化 \(\log_2 10 \approx 3.3\) 秒;体积就算用 \(10^{20}\) 或 \(10^{22}\),\(T\) 也只在 83 到 90 秒之间移动——答案对输入误差高度稳健,这正是指数过程的特征。反向抽查:\(2^{87} \approx 1.5 \times 10^{26}\),乘以 \(r = 10^{-5}\) 得 \(1.5 \times 10^{21}\) 立方米,确实覆盖 \(1.1 \times 10^{21}\) 的体积。

面试怎么讲。先声明方法:「体积除以流量定尺度,翻倍把尺度变成对数。」然后报三个数:\(V \approx 10^{21}\)、\(r \approx 10^{-5}\)、\(T \approx 3.32 \times 26 \approx 87\) 秒。最后主动点出反直觉的来源:「几何级数的和约等于末项两倍,所以前 80 秒几乎白灌,最后 7 秒灌进 99% 的水。」这句话证明你不只会算,还知道这题在考什么。

#例题详解二:首数字为 9 的 2 的幂

例题 2:是否存在以 9 作为首位数字的 2 的幂?若存在,最小的是哪一个?

建模。把「首数字」翻译成对数语言:\(2^{n}\) 以 9 开头当且仅当 \(\{n\log_{10} 2\} \in [\log_{10} 9,\, 1)\)。记 \(\alpha = \log_{10} 2 \approx 0.30103\),问题变成:序列 \(\{n\alpha\}\) 会不会落进长度约 0.046 的这个区间。

推导。第一步,\(\alpha\) 是无理数(若 \(\alpha = a/b\),则 \(10^{a} = 2^{b}\),左边有因子 5、右边没有,矛盾)。第二步,由 Kronecker 定理,无理数 \(\alpha\) 的倍数小数部分 \(\{n\alpha\}\) 在 \([0,1)\) 中稠密,任何区间——包括 \([\log_{10} 9, 1)\)——都包含无穷多个 \(\{n\alpha\}\);由 Weyl 等分布定理,落入比例还恰为区间长度 \(\log_{10}(10/9) \approx 4.6\%\)。所以不仅存在,而且有无穷多个。第三步,找最小例子:需要 \(\{n \times 0.30103\} \ge 0.9542\)(\(\log_{10} 9 \approx 0.95424\))。逐段尝试:\(n = 53\) 时 \(53 \times 0.30103 = 15.9546\),小数部分 \(0.9546 \ge 0.9542\),命中。验证:

\[ 2^{53} = 9{,}007{,}199{,}254{,}740{,}992 \]

首数字正是 9,且 \(n \lt 53\) 的幂都没有以 9 开头(更小的候选如 \(n=46\):\(46 \times 0.30103 = 13.847\),小数部分 0.847 落在 8 的区间)。

检验。交叉验证方向:\(2^{53} \approx 9.007 \times 10^{15}\),取对数 \(15 + \log_{10} 9.007 = 15.9546\),与上面一致。彩蛋式自查:\(2^{53}\) 恰好是双精度浮点数能精确表示的最大整数,做数值计算的人对它有肌肉记忆。频率口径的检验:在 \(n \le 10^4\) 的 2 的幂里数一数首数字 9 的占比,会得到接近 4.6% 的数——等分布的数值体现。

面试怎么讲。「存在且无穷多:首数字由 \(\log_{10} 2^{n}\) 的小数部分决定,\(\log_{10} 2\) 是无理数,倍数的小数部分稠密甚至等分布;最小例子是 \(2^{53} = 9.007 \times 10^{15}\)。」再补 Benford:「长期看首数字 9 只占 \(\log_{10}(10/9) \approx 4.6\%\),首数字 1 占 \(\log_{10} 2 \approx 30\%\)——小数字天然更容易开头。」这样从存在性、构造、到分布规律三层答全。

#例题详解三:对折纸到月球

例题 3(与例题 1 同型的几何级数巩固题):一张纸厚 0.1 毫米,每对折一次厚度翻倍。大约对折多少次后,厚度超过地月距离 \(3.8 \times 10^{8}\) 米?

建模。与灌水题同构:初始量 \(h_0 = 10^{-4}\) 米,每折翻倍,目标 \(L = 3.8 \times 10^{8}\) 米,求 \(k\) 使 \(h_0 \cdot 2^{k} \ge L\)。唯一差别是这题没有「级数求和」,只有单量翻倍——连几何级数那一步都可以省掉。

推导。解指数方程:

\[ 2^{k} \ge \frac{3.8 \times 10^{8}}{10^{-4}} = 3.8 \times 10^{12} \;\;\Longrightarrow\;\; k \ge \log_{2}(3.8 \times 10^{12}) = \log_{2} 3.8 + 12 \log_{2} 10 \approx 1.93 + 39.86 \approx 41.8 \]

取整,42 次对折后厚度约 \(4.4 \times 10^{8}\) 米,超过地月距离。

检验。直觉核查:42 次翻倍是 \(2^{42} \approx 4.4 \times 10^{12}\) 倍,乘以 0.1 毫米得 44 万公里,量级吻合(地月距离 38 万公里)。与灌水题共用同一条敏感性规律:纸厚估错一倍,\(k\) 只差 1。物理边界也值得一句:现实纸张对折 7 到 8 次就到极限,此题是纯数学对象。

面试怎么讲。「42 次——因为需要的是 \(3.8 \times 10^{12}\) 倍,而 \(2^{42}\) 恰好过了 \(4 \times 10^{12}\)。」一句话给出比值与对数,再报结果。这道题常被用来测试你会不会老实开算 \(\log_2\):能立刻换算 \(12 \log_{2} 10 \approx 40\) 的人,说明对数心算已经自动化。

#误区与边界

四个高频翻车点

一,灌水题用「平均流量」算时间:指数过程没有平均可言,必须用几何级数求和,且和由末项支配。二,对数底数混乱:\(\log_{10}\) 换 \(\log_{2}\) 记住 3.32 这个换算率,底数搞错答案差 3 倍以上。三,首数字题只答「存在」不答构造:面试官几乎必然追问「那最小的呢」,提前备好 \(2^{53}\)。四,估算题过度追求精确:第二位有效数字对答案影响不到 5%,却浪费口算时间并显得没抓住考点。

边界与变式

灌水题的变式:流量每秒变为 1.5 倍(对数底换成 \(\log_{2} 1.5 \approx 0.58\) 倍时间)、或问「灌满一半要多久」(答案只差 1 秒——因为最后 1 秒灌进一半)。首数字题的变式:是否存在以 2025 开头的 2 的幂(同样稠密性,最小例子更大);\(2^{n}\) 与 \(5^{n}\) 的首数字为何都服从 Benford(它们都是「跨越多个数量级的增长序列」,而对数小数等分布)。这些变式都回到同一句话:乘法世界的问题,到对数世界里解。

#检查清单

  • 我能用半径 \(6.4 \times 10^{6}\) 米估出地球体积 \(V \approx 10^{21}\) 立方米。
  • 我能写出翻倍流量的几何级数 \(S(T) = r(2^{T}-1)\),并解释为何总和由末项支配。
  • 我能心算 \(26 \times \log_{2} 10 \approx 86\),给出灌水答案约 87 秒,并说明流量误差只影响几秒。
  • 我能证明 \(\log_{10} 2\) 无理,并说出 Kronecker 稠密性与 Weyl 等分布分别保证了什么。
  • 我能把「首数字为 9」翻译成 \(\{n\log_{10} 2\} \in [\log_{10} 9, 1)\),并给出最小例子 \(2^{53}\)。
  • 我能写出 Benford 律 \(P(d) = \log_{10}(1+1/d)\) 并解释首数字 1 占三成的直觉。
  • 我能在任何「倍增追目标」的问题里直接写出 \(T = \log_2(\text{目标}/\text{起点})\)。