(转)求最大公约数和最小公倍数
import java.util.*; /*求最大公约数和最小公倍数*/ public class MaxCommonDivisorAndMinCommonMultiple { public static void main(String[] args) { Scanner scan = new Scanner(System.in);// 接收控制台输入的信息 System.out.print("请输入第一个整数:"); int num1 = scan.nextInt(); // 取出控制台输入的信息 System.out.print("请输入第二个整数:"); int num2 = scan.nextInt(); // 取出控制台输入的信息 System.out.println(maxCommonDivisor(num1, num2));// 调用maxCommonDivisor()方法 System.out.println(minCommonMultiple(num1, num2));// 调用minCommonMultiple()方法 } // 递归法求最大公约数 public static int maxCommonDivisor(int m, int n) { if (m < n) {// 保证m>n,若m<n,则进行数据交换 int temp = m; m = n; n = temp; } if (m % n == 0) {// 若余数为0,返回最大公约数 return n; } else { // 否则,进行递归,把n赋给m,把余数赋给n return maxCommonDivisor(n, m % n); } } // 循环法求最大公约数 public static int maxCommonDivisor2(int m, int n) { if (m < n) {// 保证m>n,若m<n,则进行数据交换 int temp = m; m = n; n = temp; } while (m % n != 0) {// 在余数不能为0时,进行循环 int temp = m % n; m = n; n = temp; } return n;// 返回最大公约数 } // 求最小公倍数 public static int minCommonMultiple(int m, int n) { return m * n / maxCommonDivisor(m, n); } }
首先讲一个什么是公约数,这个问题我们小学都学过,可能有一部分人已经忘记了,所以还是讲一下,假设有两个数a,b,所谓的公约数就是能把a,b整除的最大整数。
明白了要求我们就来解决问题,一拿到问题我们都应该都能想到一个方法,就是使用穷举法,从2开始一个个找,到一个两个都能除的就记录起来,一直找到小于min(a,b)结束,
记录到的值就是他们的最大公约数代码由下:
//3找出最大公约数,穷举法 public static int getMaxDivide_ab(int a,int b){ int value=1; int max; int min; if(a==b){ return a; } if(a>b){ max=a; min=b; }else{ max=b; min=a; } for(int i=2;i<min;i++){ if(0==max%i && 0==min%i){ value=i; } } return value; }