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

Posted 牧空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数学问题——最大公约数和最小公倍数相关的知识,希望对你有一定的参考价值。

方法

最大公约数

辗转相除法
若 整 数 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);
}

以上是关于数学问题——最大公约数和最小公倍数的主要内容,如果未能解决你的问题,请参考以下文章

数学函数区间的最小值与最大值怎么算

NO.5章 入门(数学问题)

PAT:常见数学问题模板

C 或 C++ 中是不是存在用于常见数学运算(例如最小值、最大值和平均值)的可导入库? [关闭]

Leetcode题解——算法思想之数学

Dev 控件中的SpinEdit怎么控制最小值