自然数立方等于连续奇数之和:从证明到编程验证

发布时间:2026/10/8 0:02:12
自然数立方等于连续奇数之和:从证明到编程验证
十几年来我一直游走在数学科普和编程教学这两块内容之间对“看起来像魔法、拆开全是数学”的结论总是格外敏感。最近翻资料时又撞见一句话任何一个自然数 m 的立方都可以写成 m 个连续奇数之和。2 的立方等于 3 加 53 的立方等于 7 加 9 加 114 的立方等于 13 加 15 加 17 加 19。每个等式右边都恰好是 m 个连续奇数像是有个看不见的调度员在按项数分发货。这个性质不仅本身漂亮背后还牵出等差数列、立方和公式、尼科马库斯定理一整条知识链。这篇就来把它彻底拆开从现象到证明从几何直观到代码验证把我在实际推导和教学中踩过的坑也一并写出来。不管你是数学爱好者、算法初学者还是想给中学生讲点趣味数学的同行都能从里面拿到可以直接用的东西。1. 现象立方数里的连续奇数拼图1.1 先动手硬算几个例子研究任何结论最好的方式就是先别信自己算。我从 m1 开始列了一张表把每个等式右边展开看着看着规律就藏不住了。mm³展开式111283 53277 9 1146413 15 17 19512521 23 25 27 29621631 33 35 37 39 41734343 45 47 49 51 53 55851257 59 61 63 65 67 69 71这张表打完三个细节马上浮现第一项数确实严格等于 mm5 就是 5 个奇数m8 就是 8 个奇数分毫不差第二每一项之间的差都是 2完全是“连续奇数”的标准形态第三每一行的第一项分别是 1、3、7、13、21、31、43、57也就是 1、3、7、13、21、31、43、57这个序列并不陌生它是 m² - m 1。第三点特别值得停下来琢磨。为什么首项不是随便冒出来的而是精准落在 m² - m 1 上这说明“连续奇数之和等于立方”不是巧合背后有一条统一的代数规则。既然规则统一我们就能把它公式化甚至反过来证明。1.2 每行的骨架是固定结构把上面的展开式稍微整理一下每一项都是首项 a 加上若干个公差 2。例如 m6 时首项 31第 6 项是 31 2×5 41整行就是 31、33、35、37、39、41 六个奇数首项和末项之间的跨度正好是 2×(m-1)。于是结构非常清晰右边是一组长度为 m、首项为 a、公差为 2 的等差数列。等差数列求和公式可以直接套S m × a [m×(m-1)×2] / 2 m×a m×(m-1)。要让 S m³就得到 m×a m×(m-1) m³两边同时除以 mm 是正整数可以放心除得到 a m² - m 1。这一步实际上已经把规则钉死了只要让首项等于 m² - m 1后面每一项依次加 2写够 m 项总和必然是 m³。表格里的每一行都精确满足这个关系。此时我们对“现象”的信任已经有了一半的证据剩下的一半要靠严格证明和几何图景去填。2. 两条证明路线把规则吃透2.1 代数求和老老实实推一遍既然已经认定右侧是等差数列那就用最基础的方式做一次完整推导。设 m 个连续奇数为a, a2, a4, …, a2(m-1)。把它们加起来可以拆成两部分m 个 a 相加得 m×a后面的增量是 2×(012…(m-1))括号里的和是 m×(m-1)/2所以增量部分是 m×(m-1)。合在一起仍是S m×a m×(m-1)。现在要求 S m³也就是m×a m×(m-1) m³m×a m³ - m×(m-1)a m² - m 1。反过来把这个 a 代回到 S 的表达式里S m×(m² - m 1) m×(m-1) m³ - m² m m² - m m³。中间好几项漂亮地抵消了。到这里结论已经完成代数层面的证明。细心的人会注意到这个推导全程没有要求 a 必须是奇数只是最后我们发现 m² - m 1 必然是个奇数才正好落在“连续奇数”的约束里。这个性质在下一节展开。2.2 平均数视角m³ 其实是 m 个 m²除了硬算求和还有一个更轻巧的视角来自等差中项。m 个连续奇数构成等差数列首项 m² - m 1末项 m² m - 1。首末项的平均数是[(m² - m 1) (m² m - 1)] / 2 m²。所以这一串奇数的平均数正好是 m²。等差数列的平均数等于中间项于是整个和等于“平均数 × 项数” m² × m m³。这个解释只有两行但信息量极大。用这个视角再看表里的数据m5 时5 个奇数以 25 为中心展开成 21、23、25、27、29平均数 25乘以 5 得到 125。m4 时4 个奇数 13、15、17、19 的平均数也是 16首末平均 (1319)/2164×1664。这就意味着m³ 本质上可以理解成“m 份 m² 拼在一起”只是我们不直接写 m 个 m²而是把 m² 这个平均数往两侧对称展开变成一串连续奇数。展开后的每一对“偏离”会在平均计算时互相抵消和依然是 m 个 m²。2.3 为什么首项一定是奇数推导过程中唯一可能让人不安的是凭什么说 m² - m 1 一定是个奇数答案在奇偶性分析里。m² 和 m 的奇偶性相同所以 m² - m 一定是偶数偶数加 1自然是奇数。另一个等价写法是 m×(m-1)1m 和 m-1 是连续整数其中必有一个偶数所以乘积为偶数再加 1 得到奇数。两个角度都能说明问题。还要确认首项是正奇数。m1 时a1m2 时a3m≥3 时m² - m 1 m(m-1)1 ≥ 3×217。也就是说对一切自然数 m展开式里的每一行都是正奇数出现负数的情况根本不需要担心。这也是我在教学时特别喜欢强调的一点证明一个性质不只是证明“等式成立”还要顺手验证构成这个等式的元素满足所有定语条件比如“连续”“奇数”“m 个”。3. 更大的图景奇数列、正方形与立方和公式3.1 把散落的奇数拼成一张大图前文每次只盯着一个立方数看但如果把多个展开式纵向叠在一起会看到一张更壮观的图景。把从 1 开始的每个立方都写成连续奇数之和然后按顺序拼接右侧1³ 12³ 3 53³ 7 9 114³ 13 15 17 19…把所有等式右边连成一条线1、3、5、7、9、11、13、15、17、19……恰好就是从 1 开始的所有奇数一个也没有遗漏。这是因为第 m 行正好用了 m 个奇数前面 m-1 行累计用了 12…(m-1) m(m-1)/2 个奇数所以第 m 行从第 m(m-1)/2 1 个奇数开始。这个位置对应的奇数恰好就是 m² - m 1和前面推出的首项公式完全吻合。连续奇数被各行无缝切分没有重叠也没有空隙。这个观察直接引出尼科马库斯定理前 m 行左边加起来是 1³ 2³ … m³右边加起来是前 T 个奇数之和其中 T 12…m m(m1)/2。任意前 T 个奇数之和等于 T²因此1³ 2³ 3³ … m³ [m(m1)/2]²。而 m(m1)/2 恰好是前 m 个自然数之和所以又得到那个相传已久的漂亮等式1 到 m 的立方和等于 1 到 m 之和的平方。有人管它叫尼科马库斯定理有人当作“雅可比恒等式”的简单版本讲总之它和我们标题里的性质是同一条知识链上的两颗明珠。3.2 如何用正方形解释“奇数铺出平方数”为什么前 T 个奇数之和等于 T²这里需要一个几何直观。从 1 开始每一次加下一个奇数都像是在正方形的外围补一圈 L 形边框。1 就是一格正方形13 等于在原来 1×1 的外侧补上 3 格变成 2×2再加上 5 格变成 3×3加第 k 个奇数 2k-1就是边长从 k-1 变成 k 时新增的外框格数。于是前 k 个奇数的和总能拼成一个 k×k 的正方形。但标题里的性质用的是从 m²-m1 开始的“中间一段”奇数而不是从 1 开始的前 m 个奇数。为什么截图也能成立关键在于平均数恰好是 m²。拿正方形来说这一串奇数虽然不从 1 开始但它们的中心位于 m²且左右对称分布对称的两项之和总是 2m²最终会把整体拉回“m 个 m²”的形态。所以几何上可以理解为m³ 是一个 m×m×m 的立方体我们把它拍扁成 m 排每排 m² 个格子再从 m² 往两头“摊开”成连续奇数。代数、几何、整数性质在这里完全对齐。3.3 这个性质在课堂上的真正价值我多次拿这个性质当数列求和的引子效果比直接抛公式好得多。原因是学生可以先动手不用依赖任何高级知识随便挑一个 m比如 6试着找 6 个连续奇数让它们等于 216很快会得到 31 到 41。紧接着换 m8又能得到 57 到 71。多算几个数之后他们自己就会开始找首项的规律发现第 m 行的首项是 m²-m1进而愿意主动学习等差数列求和的公式。整个过程有一种“我自己发现的”错觉而这种错觉恰恰是最好的学习动力。4. 写程序验证顺便探索边界情况4.1 几行代码把结论跑一遍这种规律性极强的性质非常适合用程序验证。我习惯这样写直接用首项公式 m²-m1 生成 m 个连续奇数再断言它们的和等于 m³。def cube_to_odd_sum(m: int): start m * m - m 1 odds [start 2 * k for k in range(m)] return odds, sum(odds), m ** 3 for m in range(1, 21): odds, total, cube cube_to_odd_sum(m) assert total cube, fm{m} 时不成立 print(f{m:2}^3 { .join(map(str, odds))} {cube})这段代码输出的是从 m1 到 m20 的完整展开式比如最后一行会打印 20^3 381 383 … 419 8000。程序写起来几乎不费脑子因为核心逻辑不是枚举搜索而是构造先算出首项再等差数列生成后面每一项。这也顺带回答了一个常见疑问这类题目在算法竞赛里根本不需要穷举直接用公式 O(m) 生成甚至 O(1) 验证即可。知道数学规律代码可以高效很多。4.2 边界情况m1、m0 和负数在写程序之前要先想清楚自然数怎么界定。m1 时start1odds[1]总和 1等于 1³性质成立且只有一项属于“连续奇数之和”的平凡情况。m0 时“0 个奇数”没有意义等式 0³0 也无法用空和来解释所以通常把结论限定在 m 为正整数。至于负数如果坚持代公式m-2 时 start 4 - (-2) 1 7生成的是 7、9和是 16那是 (-2)³ 吗不是16 不等于 -8。说明直接套 m-2 并不正确因为负数情况需要重新约定项数。如果把负号提到外面比如 (-2)³ -(2³) -(35)也就是 -3 (-5) 这两个连续负奇数之和反倒是成立的。所以严格说法是对任意非零整数 nn³ 都可以表示为 |n| 个连续整数同符号奇数之和但自然数的版本最干净考试和教学里也最常用。4.3 一个立方数还能拆成多少种连续奇数之和标题给的是“m 个连续奇数之和”用的是恰好 m 个。但同一个立方数有没有其他拆分方式当然有。64 4³ 除了 13151719还能拆成 3133因为 313364还能拆成 1357911131564这是 8 个奇数。原因在于拆成 k 个连续奇数时首项公式变成 N/k - k 1其中 N 是目标数。要让首项是正奇数必须满足 k 整除 N且 N/k 与 k 的奇偶性合适。所以一个立方数能拆出几种形式本质上取决于它的因数分解这又为“因数个数”这个经典话题提供了一道很好的习题。我在讲数论时经常把这几个问题串在一起学生普遍觉得比孤立的练习题有意思得多。5. 常见误区与避坑记录5.1 “连续奇数”不等于“前 m 个奇数”最常出现的错误是把这个性质理解成“m³ 等于前 m 个奇数之和”。前 m 个奇数之和是 m²不是 m³。比如前 4 个奇数是 1、3、5、7加起来才 16而 4³64。正确的展开必须从 m²-m1 开始m4 时要取 13、15、17、19 这四个奇数。把这两组数放在一起对比学生立刻能看出差异也能更清楚地感受到“连续 m 个奇数”和“前 m 个奇数”完全是两个集合。5.2 注意“连续奇数”的步长是 2另一个容易出错的点是误把任意奇数组合当作连续奇数。27 7911 是连续奇数27 5913 虽然也是三个奇数但它们差分别是 4 和 4不是连续。连续奇数的本质是公差为 2 的等差数列。如果学生在计算时随意挑选奇数很可能凑出和正确但模式不对的展开式这在程序验证时尤其明显因为一旦步长不是 2构造就失败了。所以在用代码或手工推导前先检查每相邻两项之差是不是都等于 2。5.3 首项公式要自己推一遍不要死记m² - m 1 这个式子看起来简单但实际写错的人不少有人写成 m² m - 1有人写成 m² - m - 1。我的建议是不要背每次用时花十秒推一遍假设首项是 a由等差数列求和直接得到 m×a m×(m-1) m³解出 a m² - m 1。万一记不清就用 m2 验算2 的展开式必须是 35首项是 3而 m²-m13如果记成其他式子一验就露馅。验算是最便宜、最可靠的纠错手段也适用于其他公式记忆场景。5.4 别忽略“m 个”这个数量约束性质里最关键的定语其实是“m 个”。如果没有数量约束任何奇数立方都能以乱七八糟的方式拆成很多组连续奇数之和但题目限定为 m 个后展开就只剩唯一一种可能。唯一性也可以从公式看出来首项 a 由 m 唯一决定项数由 m 唯一决定公差固定为 2所以整个序列唯一。这种“数量与结构互相锁定”的感觉是数学里很经典的美感也是我在讲完这个性质后一定会强调的点。6. 从证明到课堂我的几点实操体会6.1 先让学生“发现”再讲公式我试过两种讲法一种是把首项公式直接写在黑板上然后验证另一种是先让学生随便挑 m自己列出展开式并寻找规律。第二种虽然慢一点但课堂反馈明显更好。当学生自己写下 7、9、11又写下 21、23、25、27、29再对比两组首项和 m 的关系时那种“我好像看出点什么”的眼神是装不出来的。数学教育里最难得的瞬间就是在学生心里种下一个问号再让他亲手把它拉直。6.2 用这个性质引出更大的结论这个性质的“出口”很多。如果要讲等差数列它是天然的引例如果要讲数学归纳法完全可以拿它做习题假设 m 成立时推出 m1 的展开式也能成立如果要讲数论可以顺着“多个连续奇数之和”追问哪些正整数可以写成连续整数之和这又是一套完整的理论。我在一节课里通常这样安排前十五分钟做数字实验中间十五分钟完成代数证明和几何解释最后十五分钟把 1³2³…m³(12…m)² 作为课后挑战题抛给学生。一节 45 分钟的课从动手到证明再到拓展节奏刚好。我自己的体会是真正好的数学内容不需要花哨包装只要它能在某个点上让人产生“原来如此”的惊讶就已经完成了大半任务。m 的立方拆成 m 个连续奇数之和恰好就是这样的点它够小小到小学生验算几项就能看懂它又够大大得能一路连接到等差数列、平方数、立方和公式这些核心概念。如果你也喜欢拿一两个小性质去做文章这个题目值得放进你的素材库。