求两个数的最大公约数——辗转相除法
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 中的代码如下:
程序思想:判断余数是否为0,若为0,则当前除数为最大公约数;若不为0,则把当前除数作为下次运算的被除数,当前的余数作为下次运算的除数,直到余数为0,此时的除数则为两数的最大公约数
两数的最小公倍数为两数的乘积/最小公约数,即:a、b 的最大公约数为c ,则a、b 的最小公倍数为 a*b/c
设两数为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
相关文章推荐
- 辗转相除法求两个数的最大公约数
- 辗转相除法求两个数的最大公约数
- 辗转相除法求两个数的最大公约数
- 求两个数的最大公约数:辗转相除法
- 求两个数最大公约数 (辗转相除法)
- 辗转相除法求两个数最大公约数
- 辗转相除法求两个数的最大公约数
- 辗转相除法求两个数的最大公约数
- F - hide handkerchief 利用辗转相除法 来计算两个数的最大公约数
- 习题:求两个数的最大公约数-辗转相除法
- 用辗转相除法求两个数的最大公约数
- 80x86 汇编:用辗转相除法求两个数的最大公约数
- C语言进阶之路------函数调用之辗转相除法求两个数的最小公倍数和最大公约数
- 两个数的最大公约数------欧几里德算法(辗转相除法)
- 每天一道编程题----------------辗转相除法求两个数的最大公约数及其证明
- 辗转相除法求两个数的最大公约数
- 用三种方法(辗转相除法,相减法,穷举法)求两个数的最大公约数,仅供参考。
- 辗转相除法 求 两个数的 最大公约数 和 最小公倍数
- 辗转相除法求两个数的最大公约数
- C语言 求两个数的最大公约数 (算法)--辗转相减法、辗转相除法