记录一下学到的快速求最大公约数的办法
原理
辗转相除法,也叫欧几里得算法,是用于求两个正整数的最大公约数的一种高效算法。它基于这样一个原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。
实现
直接粘代码吧
1 | def func(m, n): |
具体解释如下:
函数定义:
1
def func(m, n):
定义了一个名为
func
的函数,接受两个参数m
和n
,这两个参数用于传入需要计算最大公约数的两个数。循环部分:
1
2while n:
m, n = n, m % n这是一个
while
循环,只要n
不为 0,就会一直执行循环体。在循环体中,通过语句m, n = n, m % n
实现了辗转相除的核心操作。它将n
的值赋给m
,将m
除以n
的余数赋给n
。这样每次循环都在更新m
和n
的值,逐步逼近最大公约数。返回结果:
1
return m
当
n
最终变为 0 时,循环结束,此时的m
就是m
和n
最初传入值的最大公约数,将其返回。调用函数并输出结果:
1
2
3m = 72
n = 36
print(f"{m} 和 {n} 的最大公约数是: {func(m, n)}")定义了两个变量
m
和n
,分别赋值为 72 和 36,然后调用func
函数计算它们的最大公约数,并使用格式化字符串输出结果。
在这个例子中,计算过程如下:
- 初始
m = 72
,n = 36
。 - 第一次循环:
m = 36
,n = 72 % 36 = 0
。 - 此时
n
为 0,循环结束,函数返回m
的值 36,所以 72 和 36 的最大公约数是 36。