版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36027342/article/details/86100614
最大公约数:指两个或多个整数共有约数中最大的一个
最小公倍数:指两个或多个自然数公有的倍数中最小的一个
1.两数求最大公约数
思路:辗转相除法(即欧几里德算法)。
1).对于两个正整数m,n
2).r=m%n,取余
3).若r=0,则n为最大公约数,程序结束==>m是n的倍数,因此n为m的最大约数;否则m=n;n=r;转向步骤2.==>若m,n无倍数关系,则最大公约数便是n与m%n的最大公约数
int getgcd(int m, int n) {
//Greatest common divisor最大公约数
//取最小值
int r;
r = m % n;
while (r != 0)
{
//循环整除
m = n;
n = r;
r = m % n;
}
return n;
}
2.三数求最大公约数
思路:循环比最小值小的数,依次判断是否可以被整除
int getgcd(int x, int y, int z) {
//Greatest common divisor最大公约数
//最大公约数<=最小值
//取最小值
int r;
r = x > y ? ((y > z) ? z : y) : (x > z ? z : x);
while (r > 1)
{
//循环比最小值小的数,依次判断是否可以被整除
if (x%r == 0 && y%r == 0 && z%r == 0) {
break;
}
r--;
}
return r;
}
3.两数求最小公倍数
思路:最小公倍数=m*n/最大公约数
int getlcm(int m, int n) {
//最小公倍数=m*n/最大公约数
return m * n / getgcd(m, n);
}
4.三数求最小公倍数
int getlcm(int x, int y, int z) {
//lowest common multiple 最小公倍数
//最小公倍数>=最大值
//取最大值
int r;
r = x > y ? (x > z ? x : y) : ((y > z) ? y : z);
while (r)
{
//循环比最小值小的数,依次判断是否可以被整除
if (r%x == 0 && r%y == 0 && r%z == 0) {
break;
}
r++;
}
return r;
}