接下來的loop是在用歐幾裏得算法算兩個數的最大公約數。
a和b的最大公約數是a和b都能除盡的最大的數,ie最大的x st a mod x =0 and b mod x = 0。比如8和12的最大公約數是4
看code:
當m>n時,如果 r = m mod n 為0,那麽n就是最大公約數,比如25 mod 5=0最大公約數為5, 16 mod 8=0最大公約數為8
如果r 不是0, 比如r=12 mod 8 = 4,進入loop,那設置新的m=8, n=4, 得到 r = 8 mod 4 = 0, 結束loop。n=4是12和8之間的最大公約數
再看 如果是9和5之間,r = 9 mod 5 = 4, 進入loop,新的m=5, n = 4, 得到r = 5 mod 4 = 1 r仍然不是0,那再loop,設新的m = 4, n = 1, 得到r = 4 mod 1 = 0. 結束loop。得到9和5的最大公約數是n=1。
所以,只有當r=0, 即r不再>0時,loop結束,此時的n,為最大公約數。
最小公倍數 是 壹個數x,它是最小的,能同時除盡a和b 的數。比如(12,8)的最小公倍數 = 24 = 12*8/4, 此處4是12和8的最大公約數。
所以有了最大公約數(gcd),可以計算最小公倍數為:x=a*b/gcd(a,b)
所以最下方是通過求出的最大公約數n, 原本的ml和nl, 算出最小公倍數:ml*nl/n
可以百度壹下最大公約數,最小公倍數,余數的概念哦,屬於代數基礎。