求最大公约数——欧几里得碾转相除法
2016-03-03 23:14
791 查看
欧几里得碾转相除法求最大公约数算法:
E.给定两个正整数m和n,求最大公约数。
E1.【求余数】用n除m,r为余数。(m/n余r)
E2.【余数为0?】如果r=0,算法终止,n是答案。
E3.【减少】置m=n,n=r,返回E1
改进算法,使m=n之类的平凡替换操作减少
E.给定两个正整数m和n,求最大公约数。
E1.【求m/n的余数】用n除m,另m为余数。
E2.【余数为0?】如果m=0,算法终止,n是答案。
E1.【求n/m的余数】用m除n,另n为余数。
E2.【余数为0?】如果n=0,算法终止,m是答案。否则返回E1.
C++代码:
E.给定两个正整数m和n,求最大公约数。
E1.【求余数】用n除m,r为余数。(m/n余r)
E2.【余数为0?】如果r=0,算法终止,n是答案。
E3.【减少】置m=n,n=r,返回E1
改进算法,使m=n之类的平凡替换操作减少
E.给定两个正整数m和n,求最大公约数。
E1.【求m/n的余数】用n除m,另m为余数。
E2.【余数为0?】如果m=0,算法终止,n是答案。
E1.【求n/m的余数】用m除n,另n为余数。
E2.【余数为0?】如果n=0,算法终止,m是答案。否则返回E1.
C++代码:
#include <algorithm> int greatestCommonDvisor(int m,int n){ if(m<0 || n<0) return 0; if(m < n) std::swap(m,n); while (n != 0) { m = m % n; if (m == 0) { return n; } n = n % m; } return m; }
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析