您的位置:首页 > 其它

求两个数的最大公约数——辗转相除法

2014-08-25 12:52 2271 查看
辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数

设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用b除a,得a÷b=q......r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0,则再用r1除b,得b÷r1=q......r2
(0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r2除r1,……如此下去,直到能整除为止。其最后一个非零除数即为(a,b)

个人理解:

如形式为a/b=c....d,当余数d为0时,则除数b为a、b的最大公约数;再由辗转相除法知,求两数的最大公约数=求两数当中较小数与两数相除余数的最大公约数,如此可以一级级的向下替换,直到得到余数为0时,此时的除数为当前相除两数的最大公约数,也是最初相除两数的最大公约数

C++ primer 中的代码如下:

int gcd(int v1, int v2)
{
while(v2)
{
int temp = v2;
v2 = v1 % v2;
v1 = temp;
}
return v1;
}

程序思想:判断余数是否为0,若为0,则当前除数为最大公约数;若不为0,则把当前除数作为下次运算的被除数,当前的余数作为下次运算的除数,直到余数为0,此时的除数则为两数的最大公约数

两数的最小公倍数为两数的乘积/最小公约数,即:a、b 的最大公约数为c ,则a、b 的最小公倍数为 a*b/c
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: