求m和n的最大公约数和最小公倍数

Posted leevanes

tags:

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

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 

做这道题时,特意去查看了一下什么是最大公约数和最小公倍数.

后来直接去看了求解的思想,相信到企业中不会要求你闭门造车,若已有先例,可以研究之后拿来使用.

具体的思想是这样的:

  1>使两个数,m大于n

  2>m%n 若结果为0,那么n就是最大公约数

       若结果不为0,那么就要让n%(m%n).

写到这边就会发现,这又是一道关于递归的思想的问题.每次的运算都和上一次的运算的结果有关.

因此代码如下.

 1 //递归算法
 2     public static int maxCommonDivisor(int m, int n){
 3         if(m < n){
 4             int temp = m;
 5             m = n;
 6             n = temp;
 7         }
 8         if(m % n == 0){
 9             return n;
10         }else{
11             return maxCommonDivisor(n, m%n);
12         }
13         
14     }

 

 下面的这一种写法,和递归的思想实质上是一致的.采用了循环的形式.

 1     //循环法
 2     public static int maxCommonDivisor2(int m, int n){
 3         if(m < n){
 4             int temp = m;
 5             m = n;
 6             n = temp;
 7         }
 8         while(m % n != 0){
 9             int temp = m % n;
10             m = n;
11             n = temp;
12         }
13         return n;
14     }

 

最后,在求得最大公约数的基础上,最小公倍数很容易求得.

是m和n的乘积再除以最大公约数

1     public static int minCommonMultiple(int m, int n){
2         return m*n/maxCommonDivisor2(m, n);
3         
4     }

 

 

大神真的有很多,以上的代码写的很规范,包括命名(不是我起的),很专业.对于我的学习很有帮助.

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

求最大公约数和最小公倍数

python求最大公约数和最小公倍数

输入两个正整数m和n并求其最大公约数和最小公倍数

求最大公约数 和 最小公倍数 常见算法

java求最大公约数,和最小公倍数

c语言如何求最大公约数和最小公倍数