求两个数的最大公约数和最小公倍数
方法:最大公约数使用辗转相除法求,最小公倍数等于两个数的乘积/最大公约数
辗转相除法的原理:
用辗转相除法求几个数的最大公约数,先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是所有这些数的最大公约数。
代码:
#include <stdlib.h>
/*
输出:unsigned int *pHighCommonDivissor //最大公约数
unsigned int *pLeastCommonMultiple //最小公倍数
*/
unsigned int gcd(unsigned int first, unsigned int second)
{
if(second == 0)
return first;
return gcd(second,first%second);
}
void getNumber(unsigned int first, unsigned int second, unsigned int *pHighCommonDivissor, unsigned int *pLeastCommonMultiple)
{
/*在这里实现功能*/
if(pHighCommonDivissor == NULL || pLeastCommonMultiple == NULL || first == 0 || second == 0)
return;
unsigned int tmp;
if(first < second)
{
tmp = first;
first = second;
second = tmp;
}
tmp = first * second;
*pHighCommonDivissor = gcd(first,second);
*pLeastCommonMultiple = tmp/(*pHighCommonDivissor);
return;
}