算法第九节:求最大公约数和最小公倍数
2017-07-15 17:17
190 查看
算法分析:两个数的最大公约数,是指两个数a,b的公约数中最大的那个。例如4和8,其公约数为1,2,4,则4为4和8的最大公约数
求最大公约数算法:从两个数中较小的那个开始依次递减,得到第一个这两个数的公约数即为这两个数的最大公约数
所谓的最小公倍数,是指a,b两个数的公倍数中最小的那个。列入5和3,两个数的最小公倍数可以是15,30,45…….,那么15为其最小公倍数。
求最小公倍数算法:从两个数中最大的那个数开始依次加1,得到的第一个公培数就是这两个数的最小公倍数。
求最大公约数算法:从两个数中较小的那个开始依次递减,得到第一个这两个数的公约数即为这两个数的最大公约数
如果一个数i为a和b的公约数,那么一定满足a%i=0且b%i=0。所以,在计算这两个数的公约数时,只需从i=min(a,b)开始依次递减1,并逐一判断i是否是a和b的公约数,得到的第一个公约数即为a和b的最大公倍数。
所谓的最小公倍数,是指a,b两个数的公倍数中最小的那个。列入5和3,两个数的最小公倍数可以是15,30,45…….,那么15为其最小公倍数。
求最小公倍数算法:从两个数中最大的那个数开始依次加1,得到的第一个公培数就是这两个数的最小公倍数。
如果一个数i为a和b的公倍数,那么一定满足i%a=0且i%b=0,。所以算法只需从i=max(a,b)开始逐一加1,并判断i是否为a和b的公约数,得到的第一个公倍数就是其最小公倍数
#include<stdio.h> int gcd(int a,int b){ //求最大公约数函数 int min; if (a < 0 || b<0)return -1; if (a > b)min = b; else min = a; while (min){ if (a%min == 0 && b%min == 0) return min; min--; } return -1; } int lcm(int a,int b){ //求最小公培数函数 int max; if (a<0||b<0)return -1; if (a>b)max = a; else max = b; while (max){ if (max%a == 0 && max%b == 0) return max; max++; } return -1; } int main(){ int a, b; printf("Please input two digit for getting LCD and LCM:");//输入两个整数 scanf_s("%d %d",&a,&b); printf("The GCD of %d and %d is %d\n",a,b,gcd(a,b)); printf("The LCM of %d and %d is %d\n", a, b,lcm(a, b)); getchar(); return 0; }
相关文章推荐
- 求最大公约数和最小公倍数的最简单 高效的算法
- C语言求最大公约数和最小公倍数的几种算法
- C++程序设计:求最大公约数和最小公倍数的算法
- Java最大公约数和最小公倍数的算法!
- 利用Java求最大公约数与最小公倍数的算法
- 两个数的最大公约数和最小公倍数的算法
- 常见的求最大公约数和最小公倍数的算法
- 求最大公约数与最小公倍数的算法
- 求最大公约数和最小公倍数的三个算法
- 基本算法—最大公约数和最小公倍数
- 2..第二篇:常用算法之数学算法-----最大公约数和最小公倍数
- 两个正数的最大公约数和最小公倍数的两种算法
- 第二十一周【项目: 最小公倍数,最大公约数(算法改进)】
- (算法)辗转相除法求最大公约数和最小公倍数
- 求两个数的最大公约数和最小公倍数的算法
- 关于最大公约数和最小公倍数的算法(自己写的一个,欢迎大家吐槽)
- 求多个正整数的最大公约数和最小公倍数的三种算法
- 关于C/C++中求最大公约数和最小公倍数的算法
- 关于求最大公约数和最小公倍数的的算法
- 算法训练 5-1最小公倍数