Java算法----递归求N个正数的最小公倍数

来源:互联网 发布:传奇装备外观算法 编辑:程序博客网 时间:2024/06/08 09:17

两个或多个整数公有的倍数叫做它们的公倍数。
两个或多个整数的公倍数里最小的那一个叫做它们的最小公倍数。

直接贴出两个正数的最小公倍数的求法,这是我在大学学习java的时候的想法,虽然性能不好,但还是可以实现的.
代码如下

    /**     * 求两个数的最小公倍数     * @param num1     * @param num2     * @return 两个数的最小公倍数     */    public int minNUM(int num1, int num2) {        if (num1 >= num2){            //如果大数可以整除小数,则直接返回大数            if(num1%num2 == 0)                 return num1;            //开始从2循环,判断这两个数能不能同时除以一个数            for(int i = 2;i<num2/2+1;i++){                //如果两个数有公约数                if(num1%i == 0 && num2%i == 0){                    //提取公约数,讲约过的两个数继续求公约数                    return i*minNUM(num1/i,num2/i);                }            }            //没有公约数,则返回两数积            return num1*num2;        }else{            return minNUM(num2,num1);        }    }

上面代码用到递归,递归我会在以后另发博文送上
当求N个正整数的最小公倍数,则可以把前N-1个数的最小公倍数看成一个数跟最后一个数求两个数的最小公倍数,然后通过递归算法,讲前N-1个数继续递归,直至求两个数的最小公倍数
奉上代码:

    /**     * 求N个正正数的最小公倍数     * @param arr N个数的数组     * @index 数组要分离的最后一位     * @return N个数的最小公倍数     */    public int minNUMS(int[] arr,int index){        //分离到数组的第一位,        if(index==1){            return arr[0];        }        return minNUM(minNUMS(arr,index-1),arr[index-1]);    }

想不起来大学的时候是怎么处理了,临时想的,测试是可以的,就是不太好理解,上面的代码性能上差很多,
贴出来上次在算法书上看到的求两个数最小公倍数的方法:

      public int minSUM(int n,int m){          if(m>n) //保证第一个数不小于第二个数              return minSUM(m,n);          int temp;          int num1= n,num2=m;          while(n % m != 0){              temp = n % m;              n =m;              m =temp;          }          //m为最大公约数          return num1*num2/m;      }
原创粉丝点击