计算是在小学和初中阶段需要学习的重要知识和技能,而巧算体现了计算问题的思维精华,能让孩子初步体会思考的乐趣,同时,学习巧算也是提高计算正确率、锻炼数学思维、深入理解数学概念的好方法。
原复旦大学附属中学实验班数学名师、现百万粉丝教育博主、数学科普作者、视频号“胡小群讲数学“创始人胡小群老师的《巧算大学问》这本书借由15道经典、简单的巧算问题及15道相关拓展题,介绍了等差数列求和、等比数列求和、最值问题、和差问题等15种知识,展现了从特殊到一般、举一反三、逆向思维、数形结合、有序调整、换元法等思维方式,阐释了题目背后蕴藏的算理知识和数学思想。本书希望读者能摆脱生搬硬套、麻木记忆的学习方式,从简单的例子开始学透计算,一探巧算背后的大学问。
来源 | 《巧算大学问:15招通关速算》
作者 | 胡小群
文 | 【步步为营,止于至善】
如果不能一步到位,那就不要心急,逐步调整、思考,直到调到“最优”的情形。
题目:把 100 拆成若干个正整数的和,请给出一种拆法,使这些正整数的乘积最大。
我猜,一看到这道题,马上就会有两类小朋友跳出来了。
第一类小朋友会说:“差越小,积越大。拆成 2 个 50,积最大。”如果你是这么想的,那你可能需要先补习一下语文了,因为你犯了一个比较严重的错误,也是做数学题时的一个“大忌”——审错题。注意啦,题目里说的是“拆成若干个正整数的和”,而不是只能拆成“两个”正整数的和。
有人可能会追问:“那在可以拆出不止两个正整数的时候,是不是也要让所有数一样大,才能使积最大呢?”这个问题提得很不错啊。首先呢,你会发现其实有很多种拆法,比如可以拆成 4 个 25,5 个 20,10 个10……不同的拆法可能得到不同的积。至于这道题的最优解是不是其中的一种拆法,等看完这道题的讲解,你就有答案了。
第二类小朋友可能会说:“多拆 3,少拆 2,不拆 1。”如果你是这么做的,却不知道这背后的道理,那我会更加心疼你一些——你估计被某些套路“毒害”得不轻了。
这其实是一道很难的题。在 2020 年前后,我曾在《文汇报》上登过一篇文章,就谈到了这道题。我说,这是可能造成老师之间“劣币驱逐良币”的经典例题:本来,一个好老师能通过这个例子很好地培养学生的思维能力,有些老师却用 3 分钟教一个口诀,然后就开始让学生套用做习题,这么一来,显得这些老师自己很厉害,其实对学生没好处。
我记得当时还有人评论:用口诀秒杀难题,又高效,又好用,有什么问题呢?
如果我们只需要应付一道填空题,大概没什么问题——只可惜,你并没有学到真正的数学。但退一步讲,就算是从“应试”的角度看,这种套路也可能会伤害你。几年前,我听说在某学校的考试中出现过这道题。有意思的是,那次考试不仅要求学生写出结果,还要写出理由。据说,大部分学生都傻眼了。不想明白解题思路,知其然而不知其所以然,就是给自己挖坑啊。
现在,让我带着你挑战一下这道难题吧。
你最开始的想法是什么?我猜,你可能会觉得没什么思路,是不是?其实和你一样,我第一次见到这道题的时候也没思路。没思路的时候怎么办呢?我也是先“瞎试试”,随便写一种拆法。
我们一起来玩一下吧。你想先试哪个?
要不,就像前面所说的第一类小朋友那样,我们先试一个看起来最靠谱的拆法:把 100 拆成 2 个 50 的和,此时相应的积是 50×50 = 2500。
如果你试的是其他方案,也没关系,反正后面的思路完全是一样的。
2500 是不是最大的积呢?哪儿有那么好的运气……其实,这有点儿像一个拆积木的游戏,有一组已经搭好的积木(100 这个数),现在我们把它拆开。在拆的过程中,一定有一个“最优解”(乘积最大的拆法),只是我们不知道要怎么拆。
当拆成 2 个 50 之后,我们还能继续拆下去吗?当然可以!比如,我们还可以把其中的一个 50 再拆成 2 个 25,也就是:
此时,相应的积为:
31 250 当然比 2500 大!这也说明,再拆一次,结果更“好”。但其实呢,你不用真的把 31 250 这个数值计算出来,你要比较的不过是这两种拆法所得的积,谁更大。
看看这两种拆法,100 = 50 + 50 和 100 = 25 + 25 + 50,其中都有一个 50,这是相同点。所以实际上,我们要比较的就是第一种拆法中没拆的那个 50,和第二种拆法中的那 2 个 25,两者谁的积更大。显然,
所以,就有:
好了,做到这里,要停一停了——多多少少,我们已经得到了一些结论。首先,我们否定了第一类小朋友最开始的想法,也就是说,我们现在知道拆成 2 个 50 并不是最优解。
但我希望你想得再深一点儿,从我们这一次小小的尝试出发,你能不能得到一些更一般的结论?除了“拆成 2 个 50 不是最优解”这个结论,你能不能再看出点儿什么?
比如,我的回答是:我们虽然现在不知道最优解是什么,但至少知道,在最优的拆法中,一定不会保留 50 这个数。因为,假设有一个小朋友给出的拆法是:
我们都可以在这个拆法的基础上,把 50 拆成 2 个 25:
你看,在这两个拆法中,前面的部分都是相同的,而我们已经知道 50 <25×25,所以多拆一次,也就是把 50 拆掉,就一定能让积变得更大。
来,跟我一起把这个结论认真地写下来:
在最优的拆法中,一定不会有 50 这个数,因为如果把 50 继续拆开,就会出现能让乘积变得更大的拆法。
这个想法是不是有一点儿我之前讲过的“假设调整法”的味道?假设你给出一个包含 50 的拆法,我只要在你的方案的基础上做一个调整,就能让结果变得更好。
但是,这道题的不同之处在于,通过一次调整,我们只能说明这次做得比前一次更好,却不能像处理鸡兔同笼问题时那样,仅仅调整一次,就能找出最终的答案。显然嘛,我们第二次拆成 1 个 50 和 2 个 25,也不是最好的结果。
没关系,数学和人生一样,一次调不好状态是常态。
一次调不好,就多调几次呗。这就是我们从这一题要学到的方法:逐步调整法。
比如,当有人给出(2)式中的拆法之后,你是不是还能照样再拆掉 1个 25,让乘积变得更大呢?注意啊,25 不能拆成 2 个 12.5,因为题目里的要求是拆成“正整数”。那我们可以试试 25 = 24 + 1。你大概很快就能验证出来,按照这样的拆法,乘积是会变小的——也就是说,不能这样调整。
那再换一下,把 25 拆成 23 + 2,把(2)式继续拆成:
你一定已经看出来了,因为 25 < 23×2,所以(3)式中拆法的乘积一定比(2)式中拆法的乘积更大。
这一步做完,如果我再问你:“现在又能看出什么结论?”你一定能脱口而出了吧?
在最优的拆法中,一定不会有 25 这个数,因为如果把 25 继续拆开,就会出现能让乘积变得更大的拆法。
我常常说,在数学学习中,我们总是要追求更“一般化”的结论,因为一般化的结论的适用范围更广,也往往更接近“真相”。
我们要追求更“一般化”的结论。
现在,我们走到了“一般化”的第一层:从 100 = 50 + 50 不是最好的拆法这一结果,得到一个“一般化”的思路——最优的拆法中一定不会保留 50。对于“保留 25 这个数”的情况来说,结论也是一样的。
然后,我们要走向“一般化”的第二层:在最优的拆法中,还有哪些数是一定不会保留的呢?让我们从大到小来梳理一下。
100 会出现在最优的拆法中吗?不会,因为 100 = 50 + 50,而50×50 > 100。也就是说,通过一次调整,把 100 拆开,就可以让乘积变得更大。
不过,每次都把一个数除以 2 来考虑积的变化,可能行不通,因为碰到奇数就没法这么做。如此一来,我们也可以这么看:在最后的结果中,一定不会有 100 这个数,因为 100 = 98 + 2,而 100 < 98×2;所以保留 100,不如拆成 98 + 2 更好。
注意啊,我这里并不是说 98 + 2 是最好的拆法,我现在只要确定100“不够好”就可以了。至于 98 和 2 还要不要继续调整,后面会讨论的。我们继续:
在最优的拆法中,一定不会有 99 这个数,因为 99 可以拆成 97 +2,而 99 < 97×2;
在最优的拆法中,一定不会有 98 这个数,因为 98 可以拆成 96 +2,而 98 < 96×2;
……
很快(嗯,还算快吧……),我们就会来到:
在最优的拆法中,一定不会有 5 这个数,因为 5 可以拆成 3 + 2,而5 < 3×2;
到这里,我们已经知道一个很不错的结论了:
在最优的拆法中,一定不会有 5~100 这 96 个数。
也就是说,最后只可能有 1、2、3、4 这四个数了,这可是往前迈了一大步呀!
那么,在最优的拆法中,会不会有 4 呢?4 有一些不一样。因为 4有两种拆法,一种是 4 = 1 + 3,另一种是 4 = 2 + 2。算一下:
也就是说,如果你继续拆 4 这个数,就会有两种可能:一种让乘积不变,另一种让乘积变小。不论怎么拆,我们发现,对 4 继续调整,其实结果不会变得更好,所以我们不能说“在最后的结果中一定不会有 4”。但是我们也发现,如果把 4 拆成 2 个 2 的话,乘积是不变的。注意,题目中只要求给出一种拆法,既然如此,我们不妨把 4“扔掉”。也就是说,关于 4,我们的结论是:
在最优的拆法中,可以没有 4 这个数。
如果最优解中有 4,那么我们也一定可以找到另一组最优解,把含 4的最优解中的每个 4 都用 2 个 2 代替,此时乘积是不变的。
暂停一下,最优的拆法中一定不会有 5~100 这 96 个数,因为从乘积最大化的角度去看,把这些数再拆一次,就可以让乘积更大,所以说,拆掉它们是更“赚”的。4 在理论上可以保留,但当把 4 拆成 2 + 2 时,从乘积的角度来看,不“赚”也不“亏”,所以 4 索性也不要了。
来看看 3。3 只能拆成 1 + 2,从乘积最大化的角度来看,把 3 拆开显然“亏”了,因为 3 > 1×2 嘛。所以对于 3 这个数,就不要再去拆了,拆一次就亏一点儿。
再看 2。2 只能拆成 1 + 1,从乘积最大化的角度来看,这么做也是“亏”的。所以对于 2 这个数,我们也是不应该拆的。
现在只剩 1 了。在前面把 25 拆成 24 + 1,或在把 3 拆成 2 + 1 的时候,你八成已经看出来了,最优的拆法中不可能有 1。
所以,关于“1”的一般情况是这样的:如果把任何一个大于 1 的正整数 a 拆成 (a - 1) 和 1 的和,那么乘积一定是变小的。或者反过来说,如果最后拆的结果中有 1,那么我们都可以调整一下:把这个 1 和其他任何一个数合并成一个新的数,乘积就会变大。于是,关于 1,我们得到了一个结论:
在最优的拆法中,一定不会有 1 这个数,因为把 1 和其他任何一个数合并成一个新的数,都能使乘积变大。
好了,现在我们又把结论向前推进了一大步,已经很接近终点了:
使乘积最大的拆法,一定可以写成只有 3 和 2 两个数的形式。
现在只剩最后一个问题了:既然最优的拆法可以写成一些 3 和一些 2的组合,那要多一点儿的 3 还是多一点儿的 2 呢?
在拆分的时候,2 和 3 其实是可以“互换”的,它们之间的关系是:
但是,如果算一下乘积的话,结果会不同:
这也就是说,只要出现 3 个及以上的 2,我们就应该把 3 个 2 换成2 个 3,这样一调整,乘积就会变大。不错,答案已经呼之欲出:
使乘积最大的拆法,一定可以写成只有 3 和 2 这两个数的形式,并且 2 最多只能保留 2 个。
最后的部分,你应该可以自己写下去了吧?别偷看!你先动笔写写看,写完以后,再和我写的过程比较一下。
我们要保留尽可能多的 3。在 100 中最多包含 33 个 3,如果拆成33 个 3,就有
这样就出现了 1 个 1——实际上,1 就是 100 除以 3 的余数,这和我们的结论矛盾。
我们再尝试 32 个 3:
这个拆法符合我们的要求。还有其他符合要求的拆法吗?不可能有了。如果让 3 继续变少的话,2 就会超过 2 个。而我们已经知道,一旦有 3 个 2,我们就应该调整成 2 个 3,好让乘积变得更大。
这样的结果说明,我们终于大功告成了!(4)式就是最优解。不信你就试试看,不管你在这个基础上怎么调整,都不可能让乘积再变大了。
推荐阅读
《巧算大学问:15招通关速算》
作者:胡小群
巧算藏智慧,巧算练思维,15题探秘数学大学问!巧算背后的经典思路和创新思考:从特殊到一般、从简单到复杂、从经典到拓展。
中小学生的数学开窍之旅;家长辅导必读。摆脱无效刷题和焦虑,提高学习效率。
数学家、中国科学院院士励建书,复旦大学数学科学学院陈文斌教授大力推荐!
原复旦附中实验班数学名师、
百万粉丝教育博主胡小群老师
带着新书《巧算大学问》来钟书阁书店签售啦!
在现场有机会获得胡小群老师亲签,
还有互动合影环节哦!
中小学生、家长和教师,
以及对数学和计算感兴趣的朋友们!
千万不要错过啦!