java 计算最小公倍数的问题
发布网友
发布时间:2022-04-30 12:08
我来回答
共4个回答
热心网友
时间:2022-06-23 20:56
汗,这是欧几里得算法求最大公约数..
int r=m%n;
while(r!=0)
{ m=n;
n=r;
r=m%n;
}
这是欧几里得算法的实现...
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:
定理:*(a,b) = *(b,a mod b)
证明:a可以表示成a = kb + r,则r = a mod b
假设d是a,b的一个公约数,则有
d|a, d|b,而r = a - kb,因此d|r
因此d是(b,a mod b)的公约数
假设d 是(b,a mod b)的公约数,则
d | b , d |r ,但是a = kb +r
因此d也是(a,b)的公约数
因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证
参考资料:http://ke.baidu.com/view/1241014.htm
热心网友
时间:2022-06-23 20:57
f函数在计算两个数的最大公约数:
传入 f(8,5)
初始化: a=m=8,b=n=5,r=8%5=3
进入循环:
3!=0 -> m=n=5, n=r=3,r=5%3=2
2!=0 -> m=n=3, n=r=2,r=3%2=1
1!=0 -> m=n=2, n=r=1,r=2%1=0
0==0 退出循环
返回 n=1,即8和5的最大公约数为 1
要计算最小公倍数:再用两数之积除以这个最大公约数:LCM = 8*5/1=40
参考资料:http://ke.baidu.com/view/341375.htm
热心网友
时间:2022-06-23 20:57
举两个例子,比如拿8和12用这个循环试一下就会发现确实是可以的。这也算是计算最小公倍数的一个算法吧。记住就行了,是前人总结的。
热心网友
时间:2022-06-23 20:58
反复迭代呗。