最大公约数
来源:互联网 发布:人才市场管理系统java 编辑:程序博客网 时间:2024/06/14 15:05
1、辗转相除法
也叫欧几里德算法。
//迭代法int GCD1(int a,int b) //GreatestCommonDivisor{ /*if(b==0) { return a; } else { int tem=a%b; return GCD(b,tmp); }*/ return b==0?a:GCD(b,a%b);}//循环法int Swap(int &a,int &b){ int tmp=a; a=b; b=tmp;}int GCD2(int a,int b){ if(a<b){ Swap(a,b); } int tmp; while(b!=0){ tmp=a%b; a=b; b=tmp; } return a;}
2、更相减损法
/*第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。*/int GCD3(int a,int b){ if(a<b){ Swap(a,b); } return (a-b==0)?a:GCD3(b,a-b);}
3、改进
bool IsEve(int t){ return (t&1)==0;} //即添加更相减损法的第一步int GCD4(int a,int b){ int gcd=1; if(IsEve(a)&&IsEve(b)){ if(a>0&&b>0){ gcd*=2*GCD4(a>>1,b>>1); }else{ return 1; } } else if(IsEve(a)){ if(a>0){ gcd*=GCD4(a>>1,b); }else{ return 1; } } else if(IsEve(b)){ if(b>0){ gcd*=GCD4(a,b>>1); }else{ return 1; } } else{ gcd*=GCD3(a,b); } return gcd;}
0 0
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 0003算法笔记——【分治法】分治法与二分搜索,棋盘覆盖问题
- 非线性电子电路实验报告四
- 深入理解RunLoop
- 三星galaxy S3 刷MIUI 后使用效果
- 运算符重载两数组相加
- 最大公约数
- 回溯法和栈的思想用于“八皇后问题”的求解
- session.use_trans_sid
- 音视频基本概念
- 函数模板返回两个值的最小值,确保能正确处理字符串
- 红黑树R-B-tree
- 自动化测试常用断言的使用方法(python)
- POJ3621 Sightseeing Cows
- 003 ZeroMQ PUSH and POLL