最大公约数和最小公倍数

来源:互联网 发布:全时云会议mac版下载 编辑:程序博客网 时间:2024/05/05 06:12

1、最大公约数


最大公约数就是两个数共同的因子中,最大的那一个。百度百科上搜到一个算法流程图:




根据上述算法流程图可以写得如下的代码:

int gcs(int a, int b){int r;if(a < b)//确保a比b大{r = a;a = b;b = r;}r = b;while(r != 0){r = a%b;a = b;b = r;}return a;}

思考:两个数的公因子必定要小于或者等于这两个数中较小的那个数,这个是毫无疑问的。(记输入的较大的数为去,较小的数为b)

1、如果较大的数正好能被较小的数整除的话,那么说明最大公约数就是较小的那个整数。

2、如果不能被整除,那么就可以缩小范围求取b 和 a%b 这两个数的公约数了。如此下去,递归的思想就出来了。

Tips: 其实上述过程就是欧几里德算法欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:
gcd(a,b) = gcd(b,a mod b)

int gcd(int a,int b){    return a%b?gcd(b,a%b):b;}
当然,上述代码的前提就是a要不小于b;


2、最小公倍数

最小公倍数是两个数公共倍数总最小的那一个数。有公式:

由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即(a,b)× [a,b]=a×b。所以,求两个数的最小公倍数,就可以先求出它们的最大公约数,然后用上述公式求出它们的最小公倍数。

那么调用上述的最小公约数函数就可以得到最小公倍数了:

int msc(int a,int b){return a*b / gcd(a,b);}



0 0
原创粉丝点击