数学问题(三)——最大公约数和最小公倍数

方法

最大公约数

辗转相除法
若 整 数 g 为 a , b ( 不 同 时 为 0 ) 的 公 约 数 , 则 g 满 足 a = g × l , b = g × m , 其 中 l , m 为 整 数 a = b × k + r , 其 中 k 为 整 数 , r 为 a 除 以 b 后 的 余 数 由 上 述 三 个 公 式 可 推 出 g × l = g × m × k + r ⇒ r = g × ( l − m × k ) 若整数g为a,b(不同时为0)的公约数,则g满足 \\ a = g \times l,b = g \times m,其中l,m为整数\\ a = b \times k + r,其中k为整数,r为a除以b后的余数\\ 由上述三个公式可推出 g \times l = g \times m \times k + r \Rightarrow r = g \times (l - m \times k) ga,b(0),ga=g×l,b=g×m,l,ma=b×k+r,k,rabg×l=g×m×k+rr=g×(lm×k)

  • 也就是说,a、b的公约数g可以整除a除以b后的余数r
  • 这样,不断重复缩小数据规模,直至问题缩小成求某个非零数与零的最大公约数,找个非零数就是所求。

最小公倍数

最小公倍数 = a * b / 最大公约数,所以问题的解法就重新回到了上述的方法

代码

主要就是辗转相除法的实现
使用递归可以很方便得实现这一点

int GCD(int a, int b){
	return b == 0? a:GCD(b, a % b);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值