今天坐在226公交车上,无聊的看着昨天从图书馆借来的《机敏问答——数学》。小学生看了这篇文章一定会感谢我,因为他们不用再在家长的“残酷”要求下,没人没夜的背着乘法口诀了(开个玩笑,我可不想我们的下一代靠着无比的勤奋赢得大家尊重。)。只要知道“2A=A+A”就OK!
埃及的乘法运算不需要大量的记忆,只要知道两个乘法表就可行了。举个简单的例子,要做“12X16”的乘法,他们会从1和12开始,然后他们把每一列的数字乘以2(1X2和12X2;2X2和24X2,以此类推)直到乘到数字16,得到结果192:
12X16
1 12
2 24
4 48
8 96
16 192
看到这里有人Maybe会问要是相乘的两个数不是偶数怎么办?
请再看这个例子:
37X19
1 19
2 38
4 76
8 152
16 304
32 608
首先,按照正常的步骤从1到19开始,然后将数字翻倍,直到得出数字32(如果把32翻倍【=64】,就会超过数字37)。因为37比32大,回到左手边的序列,找出那些与32相加得37(1,4和32),然后,把右边与这些数字相对应的数字相加(19、76和608),得出答案:703。
我看完的体会是学计算机的我们是否该返璞归真一下,我记得我们的离散老师在她出的教材(《离散数学》于筑国)上写道:“人们常笑话那削足适履之人,笑话他呆板,机械,教条。貌似聪明的计算机,并不比那些计算机聪明多少,它只是靠着无比的勤奋赢得人们的尊重。”或许我们计算乘法时只需简单的“return a*b”就可以了 ,而计算机计算乘法时,乘数、被乘数都要先转化为二进制,二进制的乘法远比十进制简单,比如乘数是1011,只需将将被乘数分别左移3位、1位,移动后补入0,并将这三个数(被乘数左移3位的、被乘数左移1位的及未移位的被乘数)在累加器中相加,所得总和就是积,根据需要积可再转化为十进制。除法与乘法类似,只不过将左移改为右移,加改成减。实际上减也是通过取补码后再加,因此计算机芯片上的累加器是最繁忙的部分。 所以我认为如果我们有计算机的一半的勤奋,小时候就不必顺着、倒着背乘法口诀,碰到乘法就用加法来算,而且我敢保证在口算心算比赛中一定拿第一。
现在我们不妨把这个当成一种算法来分析,它有什么值得我们借鉴的么?
我的体会——返璞归真。(待续【写个小的CPP来分析一哈吧】)
本文介绍了古埃及乘法的简单方法,通过不断翻倍和相加避免了大量记忆乘法表。作者指出,计算机的乘法运算虽然高效,但本质也是基于类似的简单原理。这一算法引发思考,是否可以借鉴古人的智慧简化计算,尤其是对于教育领域。

3959

被折叠的 条评论
为什么被折叠?



