📜  欧几里得算法的时间复杂度(1)

📅  最后修改于: 2023-12-03 15:40:38.047000             🧑  作者: Mango

欧几里得算法的时间复杂度

欧几里得算法(又称辗转相除法)是一种用于计算两个数的最大公约数的算法。它基于以下原理:对于两个整数 a 和 b,如果它们的最大公约数为 c,那么 a 和 b 可以分别表示为 c 的整数倍,即 a = mc,b = nc。于是,a 和 b 的任意公约数都是 c 的倍数,因此 c 是 a 和 b 的最大公约数。

下面是欧几里得算法的 Python 实现:

def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

这个实现使用了 Python 的语法糖,即同时更新两个变量的值。它在每次循环中计算 a % b,直到 b 变成 0 为止。最后,它返回 a,这也是 a 和 b 的最大公约数。

这个算法的时间复杂度是 O(log min(a, b)),其中 log 表示以 2 为底的对数。这是因为每次循环都会将 b 减少一半或更多,直到变成 0。因此,这个算法的时间复杂度与输入的数的大小无关,只与它们的二进制位数有关。

欧几里得算法是计算最大公约数的最常用的方法之一,因为它简单、快速并且可靠。它也可以用于计算最小公倍数,即将 a 和 b 相乘,再除以它们的最大公约数。