辗转相除法最大的用途就是用来求两个数的最大公约数。 用(a,b)来表示a和b的最大公约数。 有定理: 已知a,b,c为正整数,若a除以b余c,则(a,b)=(b,c)。 (证明过程请参考其它资料) 例:求 15750 与27216的最大公约数。 解: ∵27216=15750×1+11466 ∴(15750,27216)=(15750,11466) ∵15750=11466×1+4284 ∴(15750,11466)=(11466,4284) ∵11466=4284×2+2898 ∴(11466,4284)=(4284,2898) ∵4284=2898×1+1386 ∴(4284,2898)=(2898,1386) ∵2898=1386×2+126 ∴(2898,1386)=(1386,126) ∵1386=126×11 ∴(1386,126)=126 所以(15750,27216)=126 辗转相除法比较适合用来求两个比较大的数的最大公约数 。
求最大公约数代码
int gcd(int x , int y)
{
if(y==0)
return x;
else
return gcd(y,x%y);
}
最小公倍数 * 最大公约数= a*b
所以最小公倍数
int lcm(int x , int y)
{
return x*y/gcd(x,y);
}
三个数字的最小公倍数求法:
先求前两个数的最小公倍数,再求这个最小公倍数与第三个数字的最小公倍数,代码如下:
int gcd(int x , int y)
{
if(y==0)
return x;
else
return gcd(y,x%y);
}
int lcm(int x , int y)
{
return x*y/gcd(x,y);
}
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("%d\n",lcm(lcm(a,b),c));
return 0;
}