题目:
输入两个正整数
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
}
}