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

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

直接贴出两个正数的最小公倍数的求法,这是我在大学学习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;
	  }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值