辗转相除法,该方法是先将两个数的较大值除以较小值得到一个余数,如果余数等于0,则除数就是最大公约数,余数不等于0就用该除数除以当前的余数判断再次得到的余数等不等于0,等于0则作为除数的上一个余数就是最大公约数,不等于0则继续往后接着除,直到最后得到的余数等于0为止。
求最小公倍数可以直接套公式,如果A,B的最大公约数记为d,最小公倍数记为m,则m有d×m=A×B(推导过程比较复杂,程序员不必掌握,这里不再赘述)
废话不多说直接上代码:
int gcd(int A, int B)//求最大公约数
{
if (B == 0) return A;
else gcd(B, A%B);
}
int lcm(int m, int n, int d)//求最小公倍数
{
return m * n / d;
}
int main()
{
int m, n,d;
printf("请输入两个正整数:");
scanf("%d%d", &m, &n);
if (m < n)
{
int temp = m;
m = n;
n = temp;
}//必须保证m>=n
d = gcd(m, n);
printf("the greatest common divisor is:%d\n",d);
printf("the least common multiple is:%d\n", lcm(m, n, d));
}
测试结果: