微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决欧几里德算法的时间复杂度减法

 int gcd(int a,int b)
{
    while(a!=b)
    {
        if(a > b)
            a = a - b;
        else
            b = b - a; 
    }

    return a;
}

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

解决方法

对于 Euclid 减法算法,ab 是正整数。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。