对于
a
、
b
a、b
a、b两数,其最大公约数记为
g
c
d
(
a
,
b
)
gcd(a,b)
gcd(a,b),最小公倍数记为
l
c
m
(
a
,
b
)
lcm(a,b)
lcm(a,b),那么最大公约数与最小公倍数存在以下关系:
a
∗
b
=
g
c
d
(
a
,
b
)
∗
l
c
m
(
a
,
b
)
a*b = gcd(a,b)*lcm(a,b)
a∗b=gcd(a,b)∗lcm(a,b)
所以只需求得其一,另一个即可求得。
- 辗转相除法:
辗转相除法又称欧几里得算法,算法依据性质
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
a
m
o
d
b
)
gcd(a,b)=gcd(b, a\ mod \ b)
gcd(a,b)=gcd(b,a mod b);
算法流程:
- r = a m o d b r = a\ mod\ b r=a mod b,如果 r = 0 r=0 r=0,结束, b b b即为最大公约数;否则,执行第二步;
- 令 a = b , b = r a = b, b = r a=b,b=r,重复第一步
-
辗转相减法:
又称更相减损术、尼考曼彻斯法,通过做一系列减法,从而求得最大公约数
算法流程:- 两数为 a , b a,b a,b,如果 a > b a>b a>b,则 a = a − b a = a- b a=a−b;否则 b = b − a b = b-a b=b−a;一直重复,知道两数之差为 0 0 0,也就是 a = b a=b a=b,此时 a 、 b a、b a、b就是原来两数的最大公约数;
以上辗转相除法和辗转相减法求得的是最大公约数,利用最大公约数与最小公倍数的关系,即可求得最小公倍数
-
大数扩大法
对于任意两数,求最小公倍数,可以通过将较大数倍增的方法求得;
算法流程:- 将两数中较大的数不断扩大 i ( 1 , 2 , . . . ) i(1,2,...) i(1,2,...)倍,直到扩大后的数可以被较小数整除即可,此时扩大后的数就是最小公倍数;
通过大数扩大法即可求得两数的最小公倍数,利用最小公倍数与最大公约数的关系,即可求得最大公约数。
以上只是几种求最大公约数,最小公倍数的方法。