现在的学生真不容易。
预初(上海的六年级)的学生,丢个给家长一道题和一个“迷之自信 + 神之走位“答案,然后问答案是怎么来的。确实,这个答案解题过程非常的飘忽。“原式=”之后的第二行,神奇的约分出现了。最后分子剩下了7和5;分母是6。
这可能是个典型牛蛙风格:最重要推导留在草稿纸上了。也或者是个普通蛙在抄袭的过程中将关键步骤省略了。
敲一下计算器,原式算出的小数和答案“35/6”是几乎一样(那小小的不同是小数计算精度造成)的。这说明答案是正确的。但是过程怎么来的呢?
图0:原题。
凭着老本和跟着一起刷小学奥数而大力提高的数论知识看出,如果分数约分而凡眼看不出分子和分母的公约数,那就只能祭出分解质因数的利器了。但是这些分子分母都是五位以上的大整数(相对于小学生),而且一般的计算器没有分解质因数的功能。想了想还是问先问度娘吧。
搜了一下“Python分解质因数”,一位好学不倦爱分享的程序员给出了一段小代码【下面有链接】。大概看了一下,大概不是胡来。剪贴,试了试可以用(见下面的图)。
图1. Python版 分解质因数小程序。
图2:程序帮助分解质因数。
在这个分解质因数的小程序的帮助下,解题过程很快的可以列出来了。答案和上面“神走位”的一样。解题过程的约分过程终于可以解释清楚了。
图3:完整的解题过程。
庆幸以下技能可以帮忙:
1)会用度娘;
2)会编程和用Python。Python是一个适合小学生学习的强大编程语言,还能辅助数学学习。
3)数学没忘光。
缺少一项就这能人力来算了,小半个小时一定需要的。
好了,到这里问题还没有结束。回到小学生的角度,需要掌握什么技能才能极快又准的算出这道题呢?
首先,人力算力必须有而且准确,能够准确的进行乘除法和分解质因数。这是最起码的条件,如果没有它后面的就不用提了。接着,是时候请出江湖上传说已久的“武林秘籍”了。
图4:江湖快要绝版的武林秘籍(有幸买到的试印版,某宝可以搜到)。
质数的概念要很清楚,这个学校的教材上有。次之,被整除的数规律必须清楚。分解质因数的技巧,要求我们很熟悉百以内的质数做除数的运算。图5中武林秘籍上的整除基础篇一定要熟记于心而且信手拈来。除了能被2,3,5整除的数的规律,还要很快认出被7,11,13的整除规律(根据武林秘籍,其实就是被1001整除的规律)。熟读武林秘籍还要经过刻苦刷题锻炼才行的了。具有伟大数学家高斯,笛卡尔,牛顿,祖冲之,张衡天赋水平的人毕竟不多,“熟能生巧”是普通人的好办法。
图5:秘籍之整除。
图6:秘籍:7,11,13之整除。
总结一下,一个小学生要想作对这些题,必须具备下面的素质:攻无不克战无不胜的必胜信念。
强大精准的算力。
带分数和假分数的转换。
分数运算规则。
质数。
数论的基本知识:被2,3,5,7,11,13整除的特征。
以上缺一不可,碰巧算对也是蒙的。
图7:秘籍之开方试除法。
其实,上面的Python小程序的算法也可以通过“武林秘籍”中的“开方试除法”来优化的,因为它用了原数的一半作为结束的边界。这是个不影响结果但是影响程序速度的问题。追求完美的人一定会解决掉它的。
“行百里者半九十”。数学这门课更是严格,要想答案对,整个一百里都不能出错。严格的回报也不小,能独立解决一道小难题的满足感也是小爆棚的。。
然后还有一些思考:站在出题人的角度,这种题的构建是简单的。把解题思路倒过来思考就可制造出无数此类的题。它考察的知识点也是比较清晰的。
计算机和编程可以辅助学生理解这个题的解题过程。当然,有能力编程也需要构建题的基本知识。
编程只是一个辅助工具。小学生必须掌握强大精准的算力和必胜的信念。在现在的教育选拔体系下,学生只有牢牢掌握基本知识,才能有资格进入更好的下一个环节。
作为碳基生命,孩子们的学习相比机器缓慢了很多。9年才能完成基础教育;18年才能成人。硅基的计算机就快速多了,拷贝一下程序就能快速得到答案而且能无限复制。我们要思考,在这人机开始正面竞争的年代,我们以后到底培养什么样的人才?他们需要什么样的素质来驾驭计算机和机器?这个问题不是小学生们可以认识到的,因为他们还在装配基础知识来帮助他们以后真正的理解认识这个社会。这可能更是家长和教育者值得考虑的问题。
以上
2018/09/29
参考:
2. 牛爸讲编程 五年级(试印版)中册。
上面网上链接挖来的分解质因数的小程序,没有修改(其实还可以根据开方试除优化一下):
n = num = int(input('请输入一个数字:')) #用num保留初始值
f = [] #存放质因数的列表
for j in range(int(num/2)+1): #判断次数仅需该数字的一半多1次
for i in range(2, n):
t = n % i #i不能是n本身
if t == 0: #若能整除
f.append(i) #则表示i是质因数
n = n//i #除以质因数后的n重新进入判断,注意应用两个除号,使n保持整数
break #找到1个质因数后马上break,防止非质数却可以整除的数字进入质因数列表
if len(f) == 0: #若一个质因数也没有
print('该数字没有任何质因数。')
else: #若至少有一个质因数
f.append(n) #此时n已被某个质因数整除过,最后一个n也是其中一个质因数
f.sort() #排下序
print('%d=%d' % (num, f[0]), end='')
for i in range(1,len(f)):
print('*%d' % f[i], end='')
运行结果如下:
>>>
RESTART: C:/src/分解质因数.py
请输入一个数字:1001
1001=7*11*13
>>>
请输入一个数字:10000
10000=2*2*2*2*5*5*5*5
>>>
请输入一个数字:86400
86400=2*2*2*2*2*2*2*3*3*3*5*5