最大公约数Greatest Common Divisor
来源:互联网 发布:控制器解析json数据 编辑:程序博客网 时间:2024/05/20 02:55
Greatest Common Divisor
在数论和程序实现中都经常用到,很重要,也有很多方法
1. 穷举法
输入a, b(假设a>b)
依次测试b、b-1…,直到可同时被a和b整除
2. 更相减损法(九章算术)
该方法特点是只用减法,单次计算代价小,但迭代次数较多
int gcd(int& a, int& b){ while(a>0 && b>0) { if(a < b) swap(a, b); int tmp = a-b; a = b; b = tmp; } return a>0?a:b; }
3. 辗转相除法(欧几里得法)
该方法特点是迭代较快;但是单次计算取余,代价大
int gcd(int& a, int& b ){ if(a<b) swap(a, b); while(b) { int tmp = a%b; a = b; b = tmp; } return a;}
4. Stein算法(奇偶法)
此种方法是将解法2和解法3结合起来,降低计算复杂度的同时也降低迭代次数。
i) 若 a, b均为偶数,
ii) 若a为偶,而b为奇
iii) 若a为奇,b为偶
iv) 若a, b均为奇
在f(a, b) = f(a, a - b)之后,(a - b)是一个偶数,下一步一定会有除以2的操作。
因此最坏情况下时间复杂度为
0 0
- 最大公约数Greatest Common Divisor
- 最大公约数(greatest common divisor)算法
- 最大公约数(Greatest Common Divisor)
- GCD (greatest common divisor)【求最大公约数】
- 求最大公约数Greatest Common Divisor(GCD)
- Euclid Greatest Common Divisor-GCD - 欧几里得 最大公约数
- The greatest common divisor gcd(最大公约数)
- Greatest Common Divisor 最大公约数 O(n)
- 最大公约数GCD(Greatest Common Divisor)算法小结
- Greatest Common Divisor 欧几里得算法(最大公约数)
- Greatest Greatest Common Divisor
- Algorithms - 最大公约数(greatest common divisor)-欧几里得(Euclid) 算法 及 代码
- Eculid算法递归地求解GCD(Greatest Common Divisor,最大公约数)
- Greatest Greatest Common Divisor HD5207
- Greatest common divisor
- The Greatest Common Divisor
- GCD (Greatest Common Divisor)
- Solving Greatest Common Divisor
- 黑马程序员——JAVA基础---基本数据类型
- NYOJ 55懒省事的小明
- 如何解决分类中的样本倾斜问题
- tomcat的结构 以及处理请求的流程
- 【基础练习】【数论/模拟】codevs1670 无穷的序列题解
- 最大公约数Greatest Common Divisor
- TestNG - Logger类的使用
- DOS命令集锦——让人见文知意
- java实现串口配置之运行环境搭建
- Java学习笔记04 俄罗斯方块的界面切换
- 笔试题 百度2015大数据云计算研发笔试(非相邻数最大和)
- 转x电容和y电容的区别
- 后台偷发短信
- Codevs1992题解