兩個或多個整數公有的倍數叫做它們的公倍數。
兩個或多個整數的公倍數裏最小的那一個叫做它們的最小公倍數。
直接貼出兩個正數的最小公倍數的求法,這是我在大學學習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;
}