最大公约数 最小公倍数

文章介绍了使用辗转相除法(欧几里得算法)来计算两个数的最大公约数和最小公倍数的方法,包括基本原理和高效的编程实现。通过反复除法,当余数为0时,除数即为最大公约数。最小公倍数则可以通过两数乘积除以最大公约数得到。此外,还提供了一个简单的C++代码示例来寻找最小公倍数。
摘要由CSDN通过智能技术生成

目录

最大公约数

辗转相除法

最小公倍数

辗转相除法

特殊方法(效率更高)


最大公约数

辗转相除法

方法:用较大的数除以较小的数,再以除数和余数反复做除法运算,当余数为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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值