目录
最大公约数
辗转相除法
方法:用较大的数除以较小的数,再以除数和余数反复做除法运算,当余数为0时,取当前算式除数为最大公约数。
求30和18的最大公约数:
(18/30=0余18)
30/18=1余12
18/12=1余6
12/6=2余0
30和18的最大公约数为6
原理:首先介绍下更相减损术的原理,假设有两个数161和63,我们要求这两个数的最大公因数,不妨假定这个最大公因数为m,我们可以将较大的数161看成63+98,63与98的和161可以被m整除,其中63也可以被m整除,自然98可以被m整除;
所以这个问题就转换为求98和63的最大公因数m(和上面m相等)
161(161-63) 63
98(98-63) 63
35 63(63-35)
35(35-28) 28
7 28(28-7)
7 21(21-7)
7 14(14-7)
7 7(7-7)
7 0
具体代码:
int gcd(int a,int b)
{
if(a%b==0) return b;
gcb(b,a%b);
}
//压缩为:
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
最小公倍数
辗转相除法
方法:两个数的最小公倍数数等于两个数的乘积除以两个数的最大公约数。即:x,y的最小公倍数 min(公倍数)=x*y÷max(公约数)
特殊方法(效率更高)
方法:创建个 while 循环 if 判断 a * i % b==0,看 a 乘于 i 得出的数看能不能被 b 整除如果可以那么它就是最小公倍数
具体代码:
int main()
{
int a , b ;
cin>>a>>b;
int i = 1;
while ((a * i) % b != 0)
{
i++;
}
cout<<i*a;
return 0;
}