求最大公约数和最小公倍数,附python实现
1、求最大公约数
1)采用辗转相除法
例如,需要求63和117的最大公约数
[
117
]
=
1
∗
[
63
]
+
54
[
63
]
=
1
∗
[
54
]
+
9
[
54
]
=
6
∗
[
9
]
+
0
[117] = 1*[63]+54\\ [63] = 1*[54]+9\\ [54] = 6*[9]+0
[117]=1∗[63]+54[63]=1∗[54]+9[54]=6∗[9]+0
可知,最大公约数为9
验证:
117
9
=
13
\frac{117}{9}=13
9117=13
63
9
=
7
\frac{63}{9}=7
963=7
得证,117和63的最大公约数为9
python代码实现:
"""
@author: yaunsine
@date: 2023/03/24
求最大公约数
"""
def get_max_gys(a:int, b:int)->int:
while b != 0:
tmp = a
a = b
b = tmp % b
return a
print(get_max_gys(117, 63))
2、求最小公倍数
已知最大公约数求最小公倍数
通过117和63的最大公约数9,求最小公倍数。
117 9 ∗ 63 9 ∗ 9 = 819 \frac{117}{9}*\frac{63}{9}*9=819 9117∗963∗9=819
验证:
819
=
117
∗
7
819
=
63
∗
9
819=117*7\\ 819=63*9
819=117∗7819=63∗9
得证,117和63的最小公倍数为819
python代码实现:
"""
@author: yaunsine
@date: 2023/03/24
求最小公倍数
"""
def get_max_gys(a:int, b:int)->int:
while b != 0:
tmp = a
a = b
b = tmp % b
return a
def get_max_gbs(a:int, b:int)->int:
max_gys = get_max_gys(a, b)
return (a * b) // max_gys
print(get_max_gbs(117, 63))