題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
程序分析:
A:兩個數求最大公約數,可以用輾轉相除法。始終用較大數(被除數)除以較小數(除數),然後用除數代替較大數(被除數),餘數代替較小數(除數),代替完後繼續讓新的被除數除以除數。直到相除餘數爲0時。最後的除數就是最大公約數。
B:兩個數的最小公倍數則是兩個數的乘積除以這兩個數的最大公約數即可。
舉例說明:求36和8的最大公約數?
第一步:36 % 8 = 4
第二步:8 % 4 = 0 (將上一步的除數當做被除數,餘數當做除數)
此時餘數爲0了,所以36和8的最大公約數是4
代碼:
import org.junit.Test; public class HighestCommonDivisor { //求最大公約數和最小公倍數的方法 public void getHighestCommonDivisor(int a , int b) { //記錄結果 StringBuffer result = new StringBuffer(); result.append(a).append("和").append(b); //記錄最大公約數的變量 int highestCommonDivisor = 1; //記錄最小公倍數的變量 int leastCommonMultiple = a * b; //要求最大公約數,需要保證a > b if(a < b) { int temp = a; a = b; b = temp; } while(0 != b) { int temp = a % b; a = b; b = temp; } highestCommonDivisor = a; leastCommonMultiple /= a; result.append(":最大公約數是").append(highestCommonDivisor).append(",最小公倍數是").append(leastCommonMultiple); System.out.println(result.toString()); } //測試方法 @Test public void test() { getHighestCommonDivisor(36,9); //--->36和9:最大公約數是9,最小公倍數是36 getHighestCommonDivisor(15, 20);//--->15和20:最大公約數是5,最小公倍數是60 getHighestCommonDivisor(3 , 5);//最大公約數是1,最小公倍數是15 } }