最大公约数的快速求法

来源:互联网 发布:如何加入淘宝天猫商城 编辑:程序博客网 时间:2024/04/30 14:39

本题为编程之美中的第2.7题,上面的解法比辗转相除发的时间复杂度要小很多。看完之后用while循环代替了递归重写了一下。

废话少说,上源码:

#include <iostream>using namespace std;int GDC(unsigned long long x, unsigned long long y){    unsigned long long deep = 1;    while(y != 0)    {        if (x < y)        {            x ^= y;            y ^= x;            x ^= y;            continue;        }        if (x & 0x01 == 0)        {            if (y & 0x01 == 0)            {                x >>= 1;                y >>= 1;                deep <<= 1;            }            else            {                x >>= 1;            }        }        else        {            if (y & 0x01 == 0)            {                y >>= 1;            }            else            {                unsigned long long temp = x - y;                x = y;                y = temp;            }        }    }    return deep * x;}int main(){    int result = GDC(24, 42);    cout << result;    return 0;}
运行结果:
24 和 42 的最大公约数 为 6。

0 0
原创粉丝点击