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

来源:互联网 发布:影集软件 编辑:程序博客网 时间:2024/05/22 21:19

算法分析:两个数的最大公约数,是指两个数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;}

这里写图片描述