Time complexity 减法欧几里德算法的时间复杂度

Time complexity 减法欧几里德算法的时间复杂度,time-complexity,euclidean-algorithm,Time Complexity,Euclidean Algorithm,这个算法的时间复杂度是多少?有人能提供详细的解释吗?对于减法欧几里德算法,a和b是正整数 最坏的情况是a=n和b=1。然后,将采取n-1步骤来计算GCD。因此,时间复杂度为O(max(a,b))或O(n)(如果它是根据迭代次数计算的) 顺便说一下,您还应该修复函数,以便它验证a和b是否真的是正整数。或者更好的是,您可以将返回和参数类型更改为无符号long或无符号int或类似类型,并按照@templatetypedef的建议,分别处理a=0或b=0的情况。如果a=1和b=0,此算法永远不会终止。@

这个算法的时间复杂度是多少?有人能提供详细的解释吗?

对于减法欧几里德算法,
a
b
是正整数

最坏的情况是
a=n
b=1
。然后,将采取
n-1
步骤来计算GCD。因此,时间复杂度为O(max(a,b))或O(n)(如果它是根据迭代次数计算的)


顺便说一下,您还应该修复函数,以便它验证
a
b
是否真的是正整数。或者更好的是,您可以将返回和参数类型更改为
无符号long
无符号int
或类似类型,并按照@templatetypedef的建议,分别处理
a=0
b=0
的情况。

如果a=1和b=0,此算法永远不会终止。@templatetypedef nope,对于减法欧几里德算法,
a
b
必须是正整数。@Anatolii修改算法以处理其中一个输入为零不是很简单吗?@templatetypedef当然,你是对的,但我不知道OP有什么确切的要求。至少,OP可以使用
无符号
类型作为参数和函数返回类型。
 int gcd(int a, int b)
{
    while(a!=b)
    {
        if(a > b)
            a = a - b;
        else
            b = b - a; 
    }

    return a;
}