数论——欧几里得算法

2018-01-02  本文已影响40人  耦耦

欧几里得算法

介绍

关于最大公约数

参考最大公约数的演示动画

一个24×60的长方形正好被十个12×12的方格填满,其中12是24和60的最大公约数。一般地,当且仅当c是a和b的公约数时,a×b尺寸的长方形可被边长c的正方形正好填满。

举例

例如,计算a = 1071和b = 462的最大公约数的过程如下:从1071中不断减去462直到小于462(可以减2次,即商q0 = 2),余数是147: 1071 = 2 × 462 + 147. 然后从462中不断减去147直到小于147(可以减3次,即q1 = 3),余数是21: 462 = 3 × 147 + 21. 再从147中不断减去21直到小于21(可以减7次,即q2 = 7),没有余数: 147 = 7 × 21 + 0. 此时,余数是0,所以1071和462的最大公约数是21。

算法

递归

int Gcd(int a, int b)
{
    if(b == 0){
         return a;
    }else{
         return Gcd(b, a % b);
    }
}

迭代

int Gcd(int a, int b)
{
    while(b != 0)
    {
        int r = b;
        b = a % b;
        a = r;
    }
    return a;
}

参考

数论——欧几里得算法

上一篇下一篇

猜你喜欢

热点阅读