您的位置:首页 > 其它

算法第九节:求最大公约数和最小公倍数

2017-07-15 17:17 190 查看
算法分析:两个数的最大公约数,是指两个数a,b的公约数中最大的那个。例如4和8,其公约数为1,2,4,则4为4和8的最大公约数

求最大公约数算法:从两个数中较小的那个开始依次递减,得到第一个这两个数的公约数即为这两个数的最大公约数

如果一个数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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法