您的位置:首页 > 其它

最大公约数与最小公倍数

2017-08-29 23:04 183 查看
参考:http://blog.csdn.net/niushuai666/article/details/7278027

最大公约数

最大公约数(英语:greatest common divisor,gcd),指两个或多个整数共同具有的最大约数,记为 {\displaystyle (a_{1},a_{2},\dots ,a_{n})} {\displaystyle (a_{1},a_{2},\dots ,a_{n})}或 {\displaystyle \gcd(a_{1},a_{2},\dots ,a_{n})} {\displaystyle \gcd(a_{1},a_{2},\dots ,a_{n})}

最大公约数求法

穷举法:分别列出两整数的所有约数,并找出最大的公约数。

素因数分解:分别列出两数的素因数分解式,并计算共同项的乘积。

短除法:两数除以其公同素因数,直到两数互素时,所有除数的乘积即为最大公约数。

辗转相除法:两数相除,取余数重复进行相除,直到余数为 {\displaystyle 0} {\displaystyle 0}时,前一个除数即为最大公约数

辗转相除法的证明

设两数为a、b(a > b),求它们最大公约数的步骤如下:

设q = a / b,r = a % b, 得a=bq+r(0≤r<b)。

1)若r = 0, 则b是a和b的最大公约数。

2)若r≠0,则继续考虑。首先,应该明白的一点是任何 a 和 b 的公约数都是 r 的公约数。要想证明这一点,就要考虑把 r 写成 r=a-bq。现在,如果 a 和 b 有一个公约数 d,而且设 a=sd , b=td, 那么 r = sd-tdq = (s-tq)d。因为这个式子中,所有的数(包括 s-tq )都为整数,所以 r 可以被 d 整除。对于所有的 d 的值,这都是正确的;所以 a 和 b 的最大公约数也是 b 和 r 的最大公约数。因此我们可以继续对 b 和 r 进行上述取余的运算。这个过程在有限的重复后,可以最终得到 r=0 的结果,我们也就得到了 a 和 b 的最大公约数。

int gcd(int a,int b)
{
return (b==0) ? a : gcd(b,a%b);
}```

**最小公倍数**
最小公倍数证明:
最小公倍数 = 两数之积 / 最大公约数(可以了解一下短除法)
证明:
设a,b两个整数,最大公约数为gcd,最小公倍数为lcm。
则a = k1 * gcd, b = k2 * gcd
lcm = a * t1 = k1 * gcd * t1 = p * k1;
lcm = b * t2 = k2 * gcd * t2 = q * k2;
又因为gcd(k1, k2) = 1,所以lcm =  k1 * k2 * gcd = a * b / gcd;
所以,最小公倍数 = 两数之积 / 最大公约数


T LCM(T a, T b) {

return a * b / GCD(a, b);

}

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