算法--最大公约数和最小公倍数
2012-07-11 11:21
393 查看
#include <stdio.h> /* 最大公约数和最小公倍数 算法 ***************************** 欧几里德算法: 其方法是用较大的数除以较小的数,上面较小的除数和得出的余数构成新的一对数, 继续做上面的除法,直到出现能够整除的两个数,其中较小的数(即除数)就是最大公约数。 大数 = 公约数 * x = 公约数 * (y + z); 小树 = 公约数 * y; 大数 % 小数 = 公约数 * z; 小数 % 公约数 * z = 公约数 * (y%z); 总有y%z == 1的时候 直到整除: 公约数 * n % 公约数 = 0; */ /*递归的方法*/ int gcd(int a, int b) { return b == 0? a : gcd(b, a%b); } /*非递归的方法*/ int gcd1(int a,int b) //求最大公约数 { int r; if(a<b) /*使a为大数,b为小数*/ { int temp=a; a=b; b=temp; } while(a%b) { r=a%b; a=b; b=r; } return b; } /*求b 和n-1个a的最小公倍数*/ int main() { int num; int a,b,k; int i; printf("输入a 的 个数:\n"); if(scanf("%d",&num)!=EOF) { printf("\ninput b :\n"); scanf("%d",&b); for(i = 1; i < num; i++) { printf("input a :\n"); scanf("%d",&a); k=gcd(b,a); b = b/k*a; /* b = 公约数 * x a = 公约数 * y 最小公倍数 = 公约数 * x * y; 这里b保存了前面n - 2个数的最小公倍数 */ } printf("最小公倍数为:%d\n",b); } system("pause"); return 0; }
*******************************************************************
运行结果
*******************************************************************
输入a 的 个数: 3 input b : 10 input a : 12 input a : 15 最小公倍数为:60 请按任意键继续. . .
相关文章推荐
- java经典算法6_最大公约数和最小公倍数
- 算法_求两个整型数的最大公约数最小公倍数
- 算法基础练习--最大公约数和最小公倍数
- 求最大公约数(gcd)和最小公倍数(lcm)算法
- 求最大公约数的算法以及最小公倍数
- 使用stein 算法计算 最大公约数和最小公倍数
- C语言之基本算法10—最大公约数和最小公倍数
- 算法 数的计算 最大公约数和最小公倍数问题
- 求两个或N个数的最大公约数(gcd)和最小公倍数(lcm)的较优算法
- 多种算法求最大公约数和最小公倍数
- 经典的100个C算法__(6)求最大公约数和最小公倍数
- 求最大公约数,最小公倍数的算法
- 求两个或N个数的最大公约数(gcd)和最小公倍数(lcm)的较优算法
- [算法]最大公约数和最小公倍数
- 使用stein 算法计算 最大公约数和最小公倍数
- Java算法之求两个数的最大公约数与最小公倍数
- 趣味算法- 最大公约数和最小公倍数
- 最小公倍数、最大公约数的算法和辗转相除法
- java基础算法之求两个数的最大公约数和最小公倍数
- JAVA算法基础 求最大公约数和最小公倍数