比乘法更大的是乘方,比乘方更大的是什么?
小学时,老师说,由于生活中经常需要把同一个数加很多很多次,因此人们发明了乘法。 a × b 就表示 b 个 a 相加。初中时,老师说,由于生活中经常需要把同一个数乘很多很多次,因此人们发明了乘方。 a ^ b 就表示 b 个 a 相乘。令人失望的是,到了高中时,我们并没有学到更牛 B 的运算符号;大学都快学完了,似乎也没见到乘方升级的苗头。乘方之上究竟是什么?下面,有请今天的主角——超级幂——登场!
很容易想到,比乘方更大一级的运算就是把 b 个 “a 次方” 重叠起来。不过,这里我们却遇到了一个之前不曾遇到的问题: a ^ a ^ a 究竟应该等于 (a ^ a) ^ a ,还是 a ^ (a ^ a) ?。我们不妨来算一算,不同算法得到的结果相差多远:
(2 ^ 2) ^ 2 = 4 ^ 2 = 16
2 ^ (2 ^ 2) = 2 ^ 4 = 16
难道两种不同的计算顺序,得到的结果总是相同的吗?让我们换 a = 3 试试:
(3 ^ 3) ^ 3 = 27 ^ 3 = 19683
3 ^ (3 ^ 3) = 3 ^ 27 = 7625597484987
哇,这下可就差远了。可以想象,如果把 “a 次方” 再多迭代几次,从右往左算和从左往右算会差得更多。恐怖的是,当有多重指数时,运算正是按照从右往左算的顺序进行的。试想,若有一种运算专门用来表示 b 个 a 构成的指数塔,这种运算的威力会多大。
1947 年,数学家 Goodstein 发现,不管初始时选取哪个自然数,按照某种预先定义好的规则进行迭代,数列最终将变成 0 。但是,数列收敛到 0 的速度极其缓慢,以至于 Goodstein 需要处理一些连乘方也无法表达出来的大数。于是, Goodstein 便正式提出了这种超越乘方的运算。他把 b 个指数 a 迭代的结果即为 ba ,也就是把 b 放在 a 的左上角。在国外的一些论坛上,有时也能看见 a^^b 的表示方法,便于在纯文本格式下的传播。不过,当时 Goodstein 并没有用超级幂 (superexponentiation) 一词,而是用的 tetration 一词。这是由前缀“四” (tetra-) 和迭代 (iteration) 一词合成的,意即排在加法、乘法、乘方之后的第四级运算。事实上, tetration 比 superexponentiation 更常用一些。网上甚至有一个 tetration 论坛,论坛里活跃着一群热爱 tetration 的数学 geek 。
超级幂是一个极为厉害的运算,它的增长速度非常惊人。在很小的数之间进行超级幂运算,就有可能得到一个巨大的天文数字。 32 等于 2 ^ (2 ^ 2) = 16 ,而 42 就等于 2 ^ (2 ^ (2 ^ 2)) = 65536 。那么, 52 等于多少呢?它应当等于 2 的 65536 次方,其结果是一个上万位的数。那 62 呢? 100100 呢?大家自己去想象吧。
我们能轻松定义出超级幂的概念,但为什么这个东西却如此“小众”呢?当然,超级幂缺乏很多加减乘除和乘方运算具有的性质,这是一个重要的原因;不过,我想应该还有一个最基本的原因吧——超级幂本身没有什么实用价值。重复对折纸张、增长率的叠加、赌博游戏中的翻番,它们都可以用乘方来描述。实际生活中有什么事情正好能用超级幂来描述的吗?我想应该不会有吧。
人类的想象力是无止境的。即使超级幂已经大到无法用言语描述的地步,大家还是会问,再把 “a 次超级幂” 迭代 b 层(注意运算顺序仍是从最深那一层开始),又会得到什么?是否就得到了第五级的运算呢?或许你马上就意识到了,这样扩展上去是没有尽头的,每一级运算迭代之后都能产生更高一级的运算。虽然此时脑子已经有点乱了,但是数学语言的严格性和理想性告诉我们,利用某种清晰的数学符号和递归法则,我们一定有办法定义出等级越来越高的运算来。
Goodstein 牛就牛在这儿。他定义了 Goodstein 记号 G(n, a, b) ,来表示 a 与 b 之间的第 n 级运算。当 n = 0 时,有 G(0, a, b) = b + 1。也就是说,第零级运算是一个一元运算——自然数的后继。第一级运算就是 G(1, a, b) ,表示的是对 a 进行上一级操作(后继操作),并重复迭代 b 次,其结果也就是 a 加上 b 。一般地,有:
G(n, a, b) = G(n - 1, a, G(n, a, b - 1))
这就形式化地给出了第 n 级运算的意思。
类似的东西不止一次地被提出过。两年前给大家介绍过世界上最大的数,当时就用到了 Knuth 箭头记号。这也是一种表示大数的方法,其思想与 Goodstein 记号几乎完全一样。 Ackermann 函数也是一个神速增长的函数,它的定义也有异曲同工之处。很多外文数学论坛则用 a [n] b 来表示 a 与 b 之间的第 n 级运算,是我比较喜欢的一种符号。
当然,有 a [n] b ,必然会有 a [a [n] b] b ,从而又会有 a [a [a [n] b] b] b ⋯⋯没有最大的数,只有更大的数。人脑和数学是两个神奇的东西,没有什么数大到人脑想不出来,也没有什么数大到数学表示不出来。仅仅在脑中试想一下 100 [100] 100 ,你的思想就已经超越了整个宇宙的大小了。