C语言辗除法做法与原理(最小公因数,最小公倍数)
做法
辗除法的作用之一有求取最大公因数,做法为两个数相除,然后把除数去除余数,依次除下去。
例:9/24=0·····9–>被除数/除数=商······余数
24/9=2·····6
9/6 =1·····3
6/3 =2·····0
此时除到余数为0的除数极为最大公因数。
原理
先谈更相减损术的原理:首先有两个数:x和y;设为9和24,求取这两个数的最大公因数M,可以知道最大的数可以看成较小的数和另一个数的相加和,如24=15+9。如果说9与15的和24可以被M整除,并且9可以被M整除,那么15也可以被M整除。理解方式(因为24可以被M分成n份,因为9可以被M整除,所以n里面有一部分被9拿走了k份,剩下的n-k份就被15拿走了,所以15/M=n-k,即6可以被整除)。
而因为15=9+6,上面说了9和15可以被M整除,同理6自然可以被M整除。
接着9=6+3,6和9可以整除,同理3也可以被M整除。
然后6=3+3,最后3=3+0。此时加数为0,这时我们就可以判断这个被加数就为最大公约数。
———从下看到上,算数的基本就是以最大公因数,乘以不同的数值去相加,等到上面的各条加法式。
辗除法在我看来就是跳过了其中数值分解逐步相加的步骤,(两个数相除24/9=2····6,按更相减损术的原理,24=(29)+6,2个9可以被M整除,那一个9自然可以被M整除,所以此时就跳到了找余数6和可以被整除的9的最大公因数,再依照辗除法的思路,9/6=1····3;继续,6/3=2····0,余数为0,在更相减损术的说法中,就是加数为0。那么这23----->两个相加的3就是我们找的最大公因数了。(不管是几个3相加,被加数与加数相同,所以最大因数就是它本身。)
最小公倍数
在已知两个数的最小公因数后,我们可以设两个数分别被最大公因数分割成a和b份。a和b之间的最大公因数肯定为1。所以最大公倍数就为abM,用两个已知数表达则为x*y/M。