求两数的最大公约数和最小公倍数的方法

来源:互联网 发布:软件可用性 编辑:程序博客网 时间:2024/06/06 05:21

先说求最小公倍数的方法,很简单:

记a,b的最大公约数为 ma = (a, b),最小公倍数mi = [a, b]。

则 mi = a * b / ma;

原理简单: mi = ( a / ma ) * ( b / ma ) * ma = a * b / ma。


最大公约数求法较多 参阅 百度百科 “最大公约数” https://baike.baidu.com/item/最大公约数/869308?fr=aladdin

主要说其中的两种 1 辗转相除法 2 更损相减术

1 辗转相除法

方法: 求 a b两数的最大公约数,

1) 令 k = a%b,若k=0,则最大公约数为b

2) 否则,令 a = b, b= k;再进行1)


其原理为:

因为 ma = (a, b); 不妨设 a >= b, 则有 m*a + n*b 能被ma整除,即 (m*a + n*b) % ma =0

若 a / b = s ...... y , 即 a%b=y,则有 a = b*s + y ; 移项可得:

y = a - b*s; 又因为 (m*a + n*b) % ma =0, 则有 y % ma = 0;

即 (a, b) = (b, y);


2 更损相减术

方法:

1) 若a,b 两数均为偶数,则均除以2以约简,直到两数中至少有一数不为偶数

2)用大数减去小数,即 a - b = c, 并 更新值 a = b, b = c (b>=c) , 重复相减,c=0; 则 最大公约数为当前的b(或a)值。


原理:

不妨设a > b,设 ma =  ( a, b ), a = m * ma,b = n * ma;则有m > n,

经过一次相减, c = a - b = (m - n)*ma; 

若m - n >= n; 此时更新a = (m - n)*ma; b = n*ma,

若m - n <  n; 此时更新a = n*ma; b =  (m - n)*ma,

显然经过若干次相减后 a - b = ma。






原创粉丝点击