四个2造任意整数:数学极客的递归技巧

Eli Bendersky 用递归与自指技巧,借助阶乘等运算,证明四个2可表示任意整数。
Eli Bendersky 的文章探讨了如何用恰好四个数字2以及加减乘除、括号、阶乘、双阶乘和平方根等运算符表示任意整数。文章从经典“四个4”谜题出发,先展示用四个2表示0到4等小整数,进而揭示核心方法:利用 (2+2)! = 24 或 2/2 = 1 等常数作为“种子”,通过递归和自指构造更大数。关键难点在于严格保持四个2的数量,因此引入一元运算符(阶乘、平方根)来“免费”改变数值。文章给出具体构造示例,并讨论 Hacker News 上的反馈:若允许对数或三角函数,问题会变得平凡。最后指出该方法可推广到其他数字的类似谜题,体现了构造性证明的数学之美。
引言:一个看似不可能的问题
用四个数字 2,通过加减乘除和括号,真的能表示出任意整数吗?这是 Eli Bendersky 在其博客文章《Making any integer with four 2s》中探讨的趣味问题。文章在 Hacker News 上获得了 180 点积分和 47 条评论,足见其吸引力。表面上看,四个 2 似乎只能产生有限的结果,但借助递归和自指技巧,答案可能超乎你的想象。
从经典谜题说起
“四个 4 表示任意数”是数学谜题中的常客,比如用四个 4 和运算符构造 1 到 100 的整数。类似地,四个 2 的问题要求用恰好四个数字 2 以及基本运算(+、-、*、/)、括号和阶乘等,表示任意整数。但 Eli 的文章并非止步于手工枚举,而是提出了一种系统化的构造方法,让“任意”二字真正落地。

构建基础:从常数到递归
用四个 2 表示小整数
首先,我们需要一些基本构件。例如:
- 0 = 2 - 2 + 2 - 2
- 1 = (2 + 2) / (2 + 2)
- 2 = 2 + 2 - 2 + 2 或 2 * (2 - 2) + 2
- 3 = 2 + 2 - 2 / 2
- 4 = 2 + 2 + 2 - 2
这些表达式展示了四个 2 的灵活性。但如何表示 5、6、乃至任意大的整数?Eli 的思路是引入阶乘和平方根等运算符,并允许数字拼接(如 22),从而扩展表达能力。
关键技巧:递归与自指
文章的核心洞见在于:如果能够表示一个数 n,那么可以利用表达式 (2+2)! = 24 或 2/2 = 1 等常数,通过递归方式构造更大的数。具体而言,Eli 展示了一种方法:先用四个 2 构造出 1,然后用 1 作为“种子”进行运算,例如将 1 表示为 (2+2)/(2+2),再通过加法和乘法迭代生成任意整数。
但这里有一个陷阱:如果我们使用超过四个 2,就违反了规则。因此,递归必须严格控制在四个 2 的框架内。Eli 提出的巧妙方案是使用阶乘和平方根等一元运算符,它们不消耗数字 2 的数量,却能改变数值。例如,2 的平方根是 √2,而 (√2)^2 = 2,这为构造提供了更多自由度。
自指(self-reference) 在形式系统中指一个表达式或定义间接地指涉自身,从而产生递归结构。在“四个2”问题中,自指体现为:用四个2构造出的某个子表达式(如 (2+2)! = 24 或 2/2 = 1)被重新用作构造更大数的“种子”,而整个构造过程本身又遵循相同的规则。这种思想与数学逻辑中的哥德尔编码、计算机科学中的递归函数(如 Ackermann 函数)以及 quine 程序(输出自身源代码的程序)有相通之处。自指允许有限规则生成无限对象,但需谨慎避免循环定义;在这里,由于每次递归都消耗“数字2”的计数,构造必须严格保持恰好四个2,因此自指是通过一元运算符(如阶乘、平方根)来“免费”改变数值而实现的。
具体构造流程与示例
从 0 到 1 的桥梁
Eli 给出的构造依赖于一个事实:我们可以用四个 2 表示出 0 和 1。例如:
- 0 = 2 - 2 + 2 - 2
- 1 = (2 + 2) / (2 + 2)
有了 0 和 1,就可以通过加法生成所有正整数:n = 1 + 1 + ... + 1(n 次)。但这需要 n 个 1,每个 1 消耗四个 2,所以总共需要 4n 个 2——这显然不符合“恰好四个 2”的要求。因此,必须寻找更高效的编码方式。
利用阶乘和双阶乘
Eli 的文章中引入了双阶乘(!!)和阶乘(!)来压缩数字。例如,4!! = 8,3!! = 3,而 (2+2)! = 24。这些运算可以快速产生较大的数,从而减少所需 2 的个数。通过组合这些运算,文章展示了一种递归算法:给定目标整数 n,如果 n 是偶数,可以尝试用 n/2 的表达式乘以 2;如果 n 是奇数,则用 (n-1)/2 的表达式乘以 2 再加 1。但这里的 2 和 1 必须由四个 2 构造出来,且不能重复使用数字。
实际上,Eli 的构造更精巧:他使用了一个辅助函数,将任意整数 k 表示为四个 2 的表达式,并利用数学归纳法证明其可行性。文章中的示例包括用四个 2 表示 5、6、7 等,展示了递归步骤的具体形态。
双阶乘(!!) 是阶乘的一种变体,定义为 n!! = n × (n-2) × (n-4) × …,直到乘到 1 或 2 为止。例如,4!! = 4 × 2 = 8,3!! = 3 × 1 = 3,5!! = 5 × 3 × 1 = 15。与普通阶乘 n! 相比,双阶乘增长较慢,但能产生一些普通阶乘难以直接得到的数(如 8 来自 4!!)。在“四个2”问题中,双阶乘提供了一种不额外消耗数字2就能压缩数值的手段:例如 (2+2)!! = 4!! = 8,仅用两个2就得到8。类似地,平方根(√)和阶乘(!)作为一元运算符,可以嵌套使用(如 √(2+2)! = √24),进一步扩展表达范围。这些运算符的引入使得递归构造更加灵活,但也需注意它们在整数域上的定义限制(如负数不能开平方)。
社区反响与技术讨论
Hacker News 上的观点
在 Hacker News 的讨论中,评论者纷纷提出自己的解法。有人指出,如果允许使用对数或三角函数,问题会变得 trivial(平凡),因为可以构造出任意实数。但 Eli 的文章限定在基本算术和阶乘等常见运算,保持了问题的挑战性。另有评论者提到,类似的问题在数学奥林匹克竞赛中出现过,但通常要求不使用阶乘等“作弊”手段。
与其他谜题的比较
与“四个 4”问题相比,四个 2 的难度更高,因为 2 更小,可用的组合更少。但 Eli 的递归方法提供了一种通用的构造性证明,而不仅仅是枚举。这种思路可以推广到其他数字,比如用四个 3 或四个 5 表示任意整数,只要能够构造出 0 和 1 即可。
四个4问题是经典数学谜题,要求用恰好四个数字4和基本运算(+、-、×、÷、括号、阶乘、小数点、循环小数等)表示0到100的整数。它最早流行于19世纪末,至今仍有大量变体。与四个2问题相比,四个4的数值更大,组合更丰富,因此更容易构造小整数;但两者核心挑战相同:在严格限制数字个数的前提下,通过运算符扩展表达能力。Eli Bendersky 的递归构造法提供了一种通用框架:只要能用给定数字构造出0和1,并通过一元运算符(如阶乘)生成“压缩”常数,就能递归表示任意整数。这一思路可推广到四个3、四个5等谜题,体现了构造性数学中“基元+递归”的威力。
结论:数学之美的体现
Eli Bendersky 的文章展示了如何通过递归和巧妙的运算符组合,用四个 2 表示任意整数。这一结果不仅有趣,也体现了数学中构造性证明的魅力。虽然在实际中我们不会用这种表达式进行计算,但它锻炼了逻辑思维和创造性解决问题的能力。对于编程爱好者而言,这种递归思想也可应用于表达式生成和符号计算等领域。
正如 HN 评论所言,这类谜题提醒我们:数学的边界往往比直觉更宽广。下次当你看到四个 2 时,不妨想想——也许它正藏着整个整数世界。
相关推荐

llm-anthropic 0.31 支持 Claude Fable 5.2 与 Mythos 5.2
llm-anthropic 0.31 已支持 Anthropic 新发布的 Fable 5.2 与 Mythos 5.2,命令行即可调用。实测显示 xhigh 推理档位生成的鹈鹕 SVG 效果最佳,而 max 档位因消耗 128,000 token 耗尽预算未能返回图像。

vLLM v0.34.0rc0:Gemma与StableLM迁移至Transformers后端
vLLM 发布 v0.34.0rc0,将 Gemma 与 StableLM 迁移至 Transformers 后端(MR #66393)。本文分析该迁移对模型兼容性、维护成本与推理行为的影响,并给出升级验证建议。

派拉蒙CEO:AI将超越CGI,成现代史最大创意解锁
派拉蒙Skydance CEO David Ellison在财报电话会上表示,AI对电影行业的影响可能超过CGI,称其为现代史上最大的创意解锁。本文解析这一判断背后的制作全景视角与行业信号。