(转)求最大公约数和最小公倍数

    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;
        }



 

posted @ 2015-10-14 21:18  CS408  阅读(279)  评论(0编辑  收藏  举报