数学问题——最大公约数和最小公倍数
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)
若整数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)
- 也就是说,a、b的公约数g可以整除a除以b后的余数r
- 这样,不断重复缩小数据规模,直至问题缩小成求某个非零数与零的最大公约数,找个非零数就是所求。
最小公倍数
最小公倍数 = a * b / 最大公约数,所以问题的解法就重新回到了上述的方法
代码
主要就是辗转相除法的实现
使用递归可以很方便得实现这一点
int GCD(int a, int b){
return b == 0? a:GCD(b, a % b);
}
以上是关于数学问题——最大公约数和最小公倍数的主要内容,如果未能解决你的问题,请参考以下文章