欧几里德算法(Euclidean algorithm)
来源:互联网 发布:c语言二进制转 bcd码 编辑:程序博客网 时间:2024/06/16 10:31
欧几里德算法(Euclidean algorithm)
又名辗转相除法, 是求两个正整数之最大公因子的算法。它是已知最古老的算法, 可追溯至公元前300年。它首次出现于欧几里德的《几何原本》中,而在中国则可以追溯至东汉出现的《九章算术》。它并不需要把二数作质因子分解。
看到过许多欧几里德算法的实现,但是下面即将给出的这个算法是个人感觉最好的一个实现。
//注意:这里不用考虑m和n的大小问题。
int euclid(int m, int n)
{
int r;
do{
r = m % n;
m = n;
n = r;
}
while(r!=0);
return m;
}
分析
①算法中不必考虑m与n的大小问题。当m<n时,第一次while循环将使m和n的值进行互换,以使m>n。
例如:当m=4 n=10时,r = m%n = 4%10 = 4; m = n = 10; n = r = 4;(完成互换)
②当=120 n=90时:
r = m%n = 120%90 = 30; m = n = 90; n = r = 30;
r = m%n = 90%30 = 0; m = n = 30; n = r = 0;(r等于0,返回m的值30)
③利用欧几里德算法,求出两个正整数的最大公因子后,即可轻松获得这两个正整数的最小公倍数:
最小公倍数 = (正整数1 * 正整数2) / 最大公因子
分析
①算法中不必考虑m与n的大小问题。当m<n时,第一次while循环将使m和n的值进行互换,以使m>n。
②当=120 n=90时:
③利用欧几里德算法,求出两个正整数的最大公因子后,即可轻松获得这两个正整数的最小公倍数:
0 0
- 欧几里德算法(Euclidean algorithm)
- 欧几里德算法(Euclidean algorithm)
- 辗转相除法, 又名欧几里德算法(Euclidean algorithm)
- 欧几里得算法 Euclidean algorithm
- Euclidean Algorithm
- Euclidean algorithm
- 扩展欧几里得算法---Extended Euclidean algorithm
- 基础数论学习笔记-----------拓展欧几里得算法【Extended Euclidean Algorithm】
- 基础数论学习笔记-----------拓展欧几里得算法【Extended Euclidean Algorithm】
- HDU_3875 Euclidean Algorithm 数论
- 数论-Euclidean algorithm
- Euclidean gcd algorithm
- 辗转相除法(Euclidean Algorithm)极简证明
- hdu/hoj 3875 Euclidean Algorithm
- 求最大公约数的欧几里德算法(Euclid's Algorithm)
- (扩展)欧几里德算法
- (扩展)欧几里德算法
- 欧几里德及扩展欧几里德算法(学习)
- Disjoint set(并查集) data structure
- 串口通信编程(2):使用Windows API
- 路由器端口触发与转发---Port Forwarding & Port Triggering
- ZOJ-1203 Swordfish
- LeetCode-Partition List
- 欧几里德算法(Euclidean algorithm)
- jquery操作select(取值,设置选中)
- UVA 657 The die is cast
- VB委托和事件
- 【JAVA】【SQL]留个样例
- Linux rpm 命令参数使用详解[介绍和应用]
- KiB、MiB与KB、MB的区别
- 费
- jQuery 操作select