【数学】求两个正整数的最大公约数
2015-02-02 21:33
288 查看
题目:《编程之美》 P150
//辗转相除法 int GCD1(int a,int b) { if (a < b) swap(a, b); if (b == 0) return a; return GCD1(a % b, b); } //利用减法 int GCD2(int a, int b) { if (a < b) swap(a, b); if (b == 0) return a; return GCD2(a - b, b); } //方法一和方法二相结合 int GCD3(int a, int b) { if (a < b) swap(a, b); if (b == 0) return a; bool marka = a & 1, markb = b & 1; if (marka && markb) { return GCD3(a - b, b); } else if (!marka && !markb) { return ( GCD3(a >> 1, b >> 1) )<<1;//不要忘了乘以2 } else if (!marka && markb) { return GCD3(a >> 1, b); } else { return GCD3(a, b >> 1); } }
相关文章推荐
- 9.在数学计算或数字分析中,经常会用到计算两个数的最大公约数的问题。即:输入两个正整数,当两个数字有一个不是正整数时会产生异常。当输入非整数数字时,也产生异常。输入无错误后,可计算两个数的最大公约数。
- 求两个正整数的最大公约数
- 求两个正整数的最大公约数GCD
- 求两个正整数的最大公约数
- 作业题,编写两个类:A和B,A创建的对象可以计算两个正整数的最大公约数,B创建的对象可以计算两个数的最小公倍数,要求:B类中有一个成员变量是A类声明的对象
- java-求任意两个正整数的最大公约数和(GCD)和最小公倍数(LCM)
- [c++]求两个正整数的最大公约数
- 输入两个正整数a,b 求其最大公约数和最小公倍数
- 欧几里得算法求两个正整数的最大公约数
- 编写程序,采用辗转相除法求解两个正整数的最大公约数
- 求两个正整数的最大公约数
- 求两个正整数的最大公约数 使用c++ class编写
- 求两个正整数的最大公约数与最小公倍数
- C++/C经典算法百题--(39-42)年龄几何,三色球问题,两个正整数的最大公约数和(GCD)和最小公倍数(LCM)
- 7.7.1用穷举法计算两个正整数的最大公约数
- 7.7 求两个正整数的最大公约数
- 求两个正整数的最大公约数
- 用辗转相除法求两个正整数的最大公约数
- 求两个正整数a 和 b的最大公约数。
- 求任意两个正整数的最大公约数和(GCD)和最小公倍数(LCM)