舍 罕王是古印度国的一个国王,他的宰相达依尔为了讨好舍罕王发明了国际象棋,并作为礼物献给了舍罕王。舍罕王十分高兴,要赏赐达依尔,并许诺可以满足达依尔的任何要求。狡猾的达依尔指着桌上的棋盘对舍罕王说:“陛下,请你按棋盘上的格子赏赐我一些小麦吧,第一个格子赏我1粒小麦,第二个格子赏我2粒小麦,第三个格子赏我4粒,以后每一个格子都比前一个格子麦粒数增加1倍即可,只要把棋盘上的全部64个格子填满,我就心满意足了”。舍罕王当然不以为然,满口答应下来,结果当舍罕王计算麦粒时却大惊失色。请问舍罕王计算的结果是多少粒麦子?
难度:★★
乍看上去达依尔的要求似乎并不过分,毕竟棋盘格子上的小麦是按粒计算的,且从1粒开始增加,所以给人的一种错觉就是达依尔要的小麦并不多。但是如果仔细计算一下麦粒的个数,答案却是惊人的。
题目已知第一个格子的麦粒数为1,第二个格子的麦粒数为2,第三个格子的麦粒数为4,…,以后每个格子中的麦粒数都是前一个格子的2倍,这样第64个格子的麦粒数就是2 64-1 ,64个格子的麦粒数加在一起就是
因此舍罕王要赏赐达依尔18 446 744 073 709 551 615 粒小麦。18 446 744 073 709 551 615粒小麦有多少呢?我们把它换算成更加直观的表达。根据常识每千克小麦有 17 200~43 400 粒,取中间值 30 000 粒/千克,那么18 446 744 073 709 551 615粒小麦大约是614 891 469 123 651.720 5千克。2018年我国小麦总产量约为131 430 000 000 千克,这样算来舍罕王要赏赐给达依尔的小麦数量大约是4678年的中国小麦产量的总和,这真是一个天文数字!
舍罕王之所以失算,原因在于他不懂得“几何级数增长”这个数学概念。在数学中几何级数又被称为等比级数,它定义为
其中 q 为公比,当 <1时,该级数收敛,也就是存在一个确定的和;当 时,该级数发散,也就是该级数的和趋于无穷大。
所谓几何级数增长就是指数列的每一项按照几何级数的形式成倍增长。当 >1时,几何级数增长的速度是非常快的,后一项是前一项的 q 倍,我们称之为指数爆炸。正如本题中所展示的,第一个棋盘格子中仅有 1 粒小麦,之后每一个格子中的小麦数量都是前一个格子的 2 倍,到了第 6 4 个格子小麦的数量就膨胀到2 64-1 ,即9 223 372 036 854 775 808,这已经是一个很大的数了。然后再将每个格子中的小麦数量累加起来,其结果必将非常庞大。
达依尔之所以骗过了舍罕王,就是利用麦粒的数量在64个格子中快速增长的特性。起初第一个格子中只有1粒麦子,这很具有迷惑性,会让人误以为麦粒并不多。但是以后每个格子中的麦粒数都是前一个格子的2倍,当格子数多达64个的时候,这个数量就会非常的巨大。如果用变量 y 表示当前格子中麦粒的数量,用变量 x 表示第几个格子,则 x 和 y 之间存在函数关系 y =2 x -1 。因为这个指数函数的底数为常量2(大于1),所以 y 会随着 x 的增加而急速膨胀。这个增长趋势可通过函数 y =2 x -1 的曲线图1-31表现出来。
图1-31 函数 y =2 x -1 的曲线
从图1-31中很容易看出,函数 y =2 x -1 中因变量 y 会随着自变量 x 的增加而加速增长,这就是所谓的指数爆炸现象。
指数爆炸现象可以应用到很多领域,如密码学领域。对于一个具有 n 位长度的密钥,使用暴力法破解的时间复杂度为 O (2 n ),其中 n 为密钥key的长度。也就是说,应用暴力破解法尝试破解的次数与密钥key的位数 n 是呈指数关系的,密钥的长度每增加1位,尝试破解的次数就扩大1倍。所以可以利用指数爆炸的特性,通过增加密钥的长度的方法来对抗暴力破解。