最大公因数、最小公倍数问题
1.最大公因数
这里找最大公因数的算法为辗转相除法(欧几里得法),要保证a大于等于b。
代码如下:
int gcd(int a,int b)
{
int c;
if(a<b)
{
c=a;
a=b;
b=c;
}
if(b==0)
return a;
else
return gcd(b,a%b);
}
2.最小公倍数
最小公倍数是在最大公因数的基础上找到的,不难证明,a和b的最小公倍数为ab/gcd(a,b),如果ab可能会爆的话,则先除后乘,即:a/gcd(a,b)*b,最小公倍数的代码就不单独放出来了。
这里放出总的求最大公因数、最小公倍数的代码:
#include <stdio.h>
int gcd(int a,int b)
{
int c;
if(a<b)
{
c=a;
a=b;
b=c;
}
if(b==0)
return a;
else
return gcd(b,a%b);
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("a和b的最大公因数为:%d\n",gcd(a,b));
printf("a和b的最小公倍数为:%d\n",a*b/gcd(a,b));
return 0;
}