最大公约数与最小公倍数

本文介绍了如何使用多种算法来求解两个或三个正整数的最大公约数(GCD)和最小公倍数(LCM)。基本要求包括程序风格的优化、自定义注释模板及友好的用户交互。提高要求则涉及到更多解决GCD的算法,以及扩展到求解三个正整数的GCD和LCM问题。
摘要由CSDN通过智能技术生成

*程序设计方法学
*作业二*2018.9.6
*最大公约数和最小公倍数

题目:求两个正整数的最大公约数和最小公倍数。
基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。
提高要求:1.三种以上算法解决两个正整数最大公约数问题。
2.求3个正整数的最大公约数和最小公倍数。

  import java.util.Scanner;

/**
 * 最大公约数与最小公倍数(作业二)
 * 辗转相除法(算法一)
 * @author Ran
 *
 */
public class Homework2_1 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入第一个正整数");
        int a=sc.nextInt(); 
        System.out.println("请输入第二个正整数");
        int b=sc.nextInt();
        calculate(a,b);  //计算
    }

    //计算最大公约数
    private static void calculate(int a, int b) {
        int max,min;
        if(a>b){   //若a大于b
            max=a;
            min=b; 
        }else{     //若a小于b
            max=b;
            min=a;
        }
        while(min!=0){  //当a、b中的较小值不为0时
            int temp=max;
            max=min;          //取余数
            min=temp%min;
        }

        System.out.println(a+"和"+b+"的最大公约数为"+max);

        //计算最小公倍数
        //(公式:(最小公倍数等于a乘b除以最大公约数)
        System.out.println(a+"和"+b+"的最小公倍数为"+a*b/max);
    }
}
import java.util.*;

/**
 * 最大公约数与最小公倍数(作业二)
 * 相减法(算法二)
 * @author Ran
 * 
 */

    public class Homework2_2 {
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            System.out.println("请输入第一个正整数");
            int a=sc.nextInt(); 
            System.out.println("请输入第二个正整数");
            int b=sc.nextInt();
            int max = Subtraction(a,b);  //计算最大公约数max

            System.out.println(a+"和"+b+"的最大公约数为"+max);  

            //计算最小公倍数
            //(公式:(最小公倍数等于a乘b除以最大公约数)
            System.out.println(a+"和"+b+"的最小公倍数为"+a*b/max);
    }

            //计算最大公约数
            public static int Subtraction(int a,int b){
                while(a!=b){  //当a不等于b时
                    if(a>b){   
                        a=a-b;   //若a>b
                    }else{
                        b=b-a;   //若a<b
                    }
                }
                return a;  
            }
    }


   import java.util.Scanner;

/**
 * 最大公约数与最小公倍数(作业二)
 * 穷举法(算法三)
 * @author Ran
 *
 */
public class Homework2_3 {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入第一个正整数");
        int a=sc.nextInt(); 
        System.out.println("请输入第二个正整数");
        int b=sc.nextInt();

        //计算最大公约数max
        int max=1;
            int i;
            for(i=2;i<=a&&i<=b;i++){  //i小于等于a和b
             if(a%i==0&&b%i==0){      //若i可同时被a、b所整除
               max=i;
            }
         }

            System.out.println(a+"和"+b+"的最大公约数是"+max);

            //计算最小公倍数
            //(公式:(最小公倍数等于a乘b除以最大公约数)
            System.out.println(a+"和"+b+"的最小公倍数是"+a*b/max);
       }
    }
import java.util.Scanner;

/**
 * 最大公约数与最小公倍数(作业二)
 * 辗转相除法(三个整数)
 * @author Ran
 *
 */
public class Homework2_4 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入第一个正整数");
        int a=sc.nextInt(); 
        System.out.println("请输入第二个正整数");
        int b=sc.nextInt();
        System.out.println("请输入第三个正整数");
        int c=sc.nextInt();

        System.out.println(a+"、"+b+"和"+c+"的最大公约数为"+max(a,b,c));
        System.out.println(a+"、"+b+"和"+c+"的最小公倍数为"+min(a,b,c));
       }

    //计算前两个数的最大公约数
    public static int max(int a,int b){  
        int x,y,z,temp;
        x=a;
        y=b;
        if (x<y){           //如果a<b,则调换位置。
            temp=x;
            x=y;
            y=temp;
        }
        while(x%y!=0){      //当a除以b的余数不等于0,将较小的数取出来除以余数
            z=x%y;
            x=y;
            y=z;
        }
        return y;
    }

    //计算前两个数的最小公倍数
    //(公式:(最小公倍数等于a乘b除以最大公约数)
    public static int min(int a ,int b){
        return a*b/max(a,b);
    }

    //计算三个数的最大公约数
    public static int max(int a,int b,int c){
      return max(max(a, b),c);
    }

    //计算三个数的最小公倍数
    public static int min(int a,int b,int c){
        return min(min(a,b),c);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值