题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
这里要用到一个概念:辗转相除法。
各位就不要去百度了,这次大家当回伸手党吧,因为百度了你也不知道看哪里,我们直接打开百度百科,哈哈。你可能看到辗转相除法也叫欧几里得算法,还有很多文字但是这都不重要,你要看的是下面这个:
没错这才是灵魂
这是算法的灵魂,我觉得但凡是正常人应该都看的出来规律是只要余数不是0,那么下一个式子就变成上一个式子的除数作为下一个的被除数,上一个余数变为下一个的除数。但是你求出来的只是最大公约数,所以你就要了解最大公约数和最小公倍数的关系。两个数的最小公倍数是两个数的积除以这两个数的最大公约数。
我们直接来看大神代码吧,哈哈,这一次我写的代码惨不忍睹,我自己都不想看了。
//最大公约最小公倍
public class Convention_multiples {
public static void main(String args[]) {
int z = divisor(100, 30);
System.out.println("最小公倍数为"+100*30/z);
}
public static int divisor(int m, int n) {
if(n > m) {
//交换值
int temp = m;
m = n;
n = temp;
}
if(m%n == 0) {
System.out.print("最大公约数为"+n);
return n;
}
else {
return divisor(n, m%n);
}
}
}
下面的就是结果比如我们算30和100的最大公约和最小公倍
上面的代码中还有一部分要记住,就是交换值的部分我在下一篇博客中会单独写一篇有关于这个算法的东西。大家可以去看看。