如何求两个数的最大公约数:辗转相除法实操最省事
上次期末数学刷题的晚上,对着一堆数论填空题卡死,满脑子都在纠结如何求两个数的最大公约数,死守着课本最基础的笨方法反复算,越算越乱,错题攒了满满一页草稿纸。那时候只会老老实实枚举两个数的所有因数,再一个个比对筛选,看似稳妥,实则容错率低的离谱,稍微数字大一点,就很容易出现疏漏,白白浪费做题的时间。
枚举法真的太鸡肋了。
最离谱的是算72和48的最大公约数那次,认认真真列出72的1、2、3、4、6、8、9、12、18、24、36、72,又挨个写出来48的全部因数,盯着两列数字比对了半天,眼花看错了数字,错把18当成了公共最大因数,一道五分的题直接空丢,当时看着答案的瞬间,只觉得又气又无奈。
那时候总觉得基础方法肯定最稳妥,死活不愿意换思路,硬是靠着枚举法啃了十几道题,正确率低的可怜,做题速度也慢的离谱。整张试卷的填空部分,光是求公约数的题型,就耗了将近二十分钟,后面的大题根本没时间仔细思考,整场刷题的节奏全被打乱了,心态彻底浮躁起来,越急越算错,越错越不想算,反反复复在简单的计算题上内耗,完全没意识到自己一直用的方法,根本不适合应试做题。
折腾好久才搞明白,根本没必要死磕枚举,普通人做题求最大公约数,只用辗转相除法就足够,步骤简单还零失误,适配所有整数数值。
实操逻辑特别直白,完全不用记复杂公式,全程就是除法取余的循环操作。随便拿两个正整数,先用大数除以小数,算出余数,接着把上一轮的除数当成新的被除数,上一轮的余数当成新的除数,继续相除取余,一直重复这个步骤,直到余数变成0,最后一轮的那个除数,就是这两个数的最大公约数。当时当场拿错题48和18试了一遍,48除以18商2余12,再用18除以12商1余6,最后12除以6商2余0,最终除数6,就是准确结果,三两步就搞定了之前算半天的题。
其实不管数字大小,这个方法都通用。后来试了三位数的数值,比如156和96,依旧是同样的步骤,156除96余60,96除60余36,60除36余24,36除24余12,24除12余0,最大公约数就是12,全程不用罗列任何一个因数,完全避开了眼花漏数的问题,做题速度直接快了好几倍。
之前一直傻乎乎的认为基础方法就是最好的,被课本的入门解法框死了思维,白白吃了很多没必要的亏。简单的小数值两位数或许看不出差距,但凡遇到稍大的数值、多位数组合,枚举法繁琐低效的弊端会被无限放大,而辗转相除法不用筛选、不用比对,纯机械运算,几乎不会出错。
那晚把所有错题全部用辗转相除法重新核算了一遍,草稿纸上的演算步骤终于变得干净规整。