最大公约数和最小公倍数
2017-01-11 20:38
162 查看
最大公约数和最小公倍数
最大公约数算法描述:古希腊数学家欧几里得(公元前330年—公元前275年)发明了一种巧妙的算法——
辗转相除法,又称欧几里得算法:
令较大数为m,较小数为n; 当m除以n的余数不等于0时,把n作为m,并把余数作为n,进行下一次循环; 当余数等于0时,返回n
最大公约数
. 递归算法
#include <stdio.h> int gcd(int i, int j){ int temp = i%j; if (temp==0) { return j; } else{ return gcd(j, temp); } } int main() { int a, b; while (scanf("%d%d", &a, &b)!=0) { printf("%d\n", gcd(a, b)); } return 0; }
. 算法分析
key | value |
---|---|
测试输入 | m=100,n=44 |
测试输出 | 4 |
时间复杂度 | O(lgM) |
空间复杂度 | O(lgM) |
. 非递归算法
#include <stdio.h> int gcd(int i, int j){ int temp = i%j; while (temp!=0) { i = j; j = temp; temp = i%j; } return j; } int main() { int a, b; while (scanf("%d%d", &a, &b)!=0) { printf("%d\n", gcd(a, b)); } return 0; }
. 算法分析
key | value |
---|---|
测试输入 | m=100,n=44 |
测试输出 | 4 |
时间复杂度 | O(lgM) |
空间复杂度 | O(1) |
最小公倍数
最小公倍数算法描述:求出最大公约数之后,最小公倍数(Least Common Multiple,简称LCM),就能迎 刃而解了。
LCM(m,n) = m*n/GCD(m,n) 比如,60与24的最大公约数为12,那么最小公倍数为:60*24/12 = 120。
. 非递归算法
#include <stdio.h> int gcd(int i, int j){ int temp = i%j; while (temp!=0) { i = j; j = temp; temp = i%j; } return j; } int main() { int a, b; while (scanf("%d%d", &a, &b)!=0) { printf("%d\n", a*b/gcd(a, b)); } return 0; }
相关文章推荐
- 最大公约数和最小公倍数
- C语言求最小公倍数和最大公约数三种算法(经典)
- 最大公约数和最小公倍数
- C语言求最小公倍数和最大公约数三种算法
- 40.最大公约数与最小公倍数
- javascript 求一组数的最小公倍数和最大公约数的简便算法 (三种方法,面向对象,回归迭代,和循环)
- 最大公约数 & 最小公倍数 计算
- 最大公约数与最小公倍数
- C++实验7-最大公约数和最小公倍数
- C++第7次实验—最大公约数和最小公倍数
- 两个数的最大公约数,最小公倍数
- 最大公约数和最小公倍数
- 任意输入两个数,求其最大公约数和最小公倍数
- 最大公约数和最小公倍数
- Java基础编程1—最大公约数和最小公倍数
- 最大公约数与最小公倍数
- 最大公约数和最小公倍数 in Java
- Great Common Divisor & Least Common Multiple(最大公约数和最小公倍数)
- 求其最大公约数和最小公倍数
- 最大公约数和最小公倍数