程序方法学作业(二) 求两个正整数的最大公约数和最小公倍数

简介: 程序方法学作业(二) 求两个正整数的最大公约数和最小公倍数

作业要求:


1.三种以上算法解决两个正整数最大公约数问题。


2.求3个正整数的最大公约数和最小公倍数。


最大公约数方法如下:


①更相减损法


   将两个数中较大的数a减去较小的数b,如果差c等于0,那么最大公约数为b,如果不等于0,则将b的值给a,c的值给b,继续相减直到差等于0。


②辗转相除法


(1)如果a>b,a=a-b;(2)如果a<b,b=b-a;(3)如果a=b,a或b就为这两个整数的最大公约数(4)如果a!=b,则再执行(1)或(2)


③穷举法

    有两整数a和b:

  i= a(或b)若a,b能同时被i整除,则i即为最大公约数,结束, i--,再回去执行第二步。


代码思路如下


首先定义主函数,用scanner函数创建键盘输入流,然后在键盘上输入两个数字

    public static void main(String[] args){ //主函数,用户通过输入1 然后开始输入两个数字       
            System.out.println("请按1开始输入数字");//两位数的三种算法的最大公约数,最小公倍数
            Scanner sca=new Scanner(System.in);//创建键盘输入流
                int input =sca.nextInt();//从键盘获取正整数
                        System.out.println("请输入第一个数:");
                        int x11=sca.nextInt();
                        System.out.println("请输入第二个数:");
                        int x12=sca.nextInt();
                        System.out.println("辗转相除法  求两个数的最大公约数"+ way2(x11,x12));//辗转相除法  求两个数的最大公约数
                        System.out.println("更相减损法  求两个数的最大公约数"+ way1(x11,x12));//更相减损法  求两个数的最大公约数
                        System.out.println("穷举法  求两个数的最大公约数"+ way3(x11,x12));//穷举法  求两个数的最大公约数
                        System.out.println("两位数最小公倍数"+ gongbeishu1(x11,x12));//两位数最小公倍数
            }

然后是更相减损法求最大公约数

public  static int way1(int x1,int x2){  //更相减损法 求两个数的最小公约数方法一
    boolean xunhuan=true;  //判断 当循环成立时
    int y=0;
    while(xunhuan){    
        if(x1>x2){    //将两个数中较大的数减去较小的数
             y=x1-x2;    //如果最大公约数为x2
             x1=y;   
        }else if(x1<x2){     //如果不等于0,则将x2的值给x1,y的值给x2,继续相减直到差等于0。
             y=x2-x1;
             x2=y;
        }else{
            xunhuan=false;
        }
    }
    return y;
}

辗转相除法求最大公约数

public static int way2(int x1,int x2){  //辗转相除法
    int temp=0;
    int y=0;
    while(x1*x2!=0){
        if(x1>x2){     //如果x1>x2,x1=x1-x2,
            y=x1%x2;
            temp=x2;
            x1=y;
        }else if(x1<x2){   //如果x1<x2,x2=x1-x2
            y=x2%x1;
            temp=x1;
            x2=y;
        }   
    }
    return temp;    //返回temp值
}

穷举法求最大公约数

public static int way3 (int x1,int x2){   //穷举法求最大公约数
    int y=x1;  //定义 把x1的值赋值给y、
    boolean qiongju=true;
    while(qiongju){
        if((x1%y==0)&&(x2%y==0)){  //如果x1,x2能同时被y整除,即y为最大公约数
            return y;
        }
        y--;    
    }
    return x1;
}

求最大公倍数

public  static int gongbeishu1(int x1,int x2){  //求两个数的最小公倍数
    int y=x1*x2/way1(x1,x2);    //两位数的乘积除以最大公约数便等于最小公倍数
    return y;   
}

调试后结果

1.png

下面附上完整代码

public class test1 {
    public static void main(String[] args){ //主函数,用户通过输入1 然后开始输入两个数字       
            System.out.println("请按1开始输入数字");//两位数的三种算法的最大公约数,最小公倍数
            Scanner sca=new Scanner(System.in);//创建键盘输入流
                int input =sca.nextInt();//从键盘获取正整数
                        System.out.println("请输入第一个数:");
                        int x11=sca.nextInt();
                        System.out.println("请输入第二个数:");
                        int x12=sca.nextInt();
                        System.out.println("辗转相除法  求两个数的最大公约数"+ way2(x11,x12));//辗转相除法  求两个数的最大公约数
                        System.out.println("更相减损法  求两个数的最大公约数"+ way1(x11,x12));//更相减损法  求两个数的最大公约数
                        System.out.println("穷举法  求两个数的最大公约数"+ way3(x11,x12));//穷举法  求两个数的最大公约数
                        System.out.println("两位数最小公倍数"+ gongbeishu1(x11,x12));//两位数最小公倍数
            }
public  static int gongbeishu1(int x1,int x2){  //求两个数的最小公倍数
    int y=x1*x2/way1(x1,x2);    //两位数的乘积除以最大公约数便等于最小公倍数
    return y;   
}
public  static int way1(int x1,int x2){  //更相减损法 求两个数的最小公约数方法一
    boolean xunhuan=true;  //判断 当循环成立时
    int y=0;
    while(xunhuan){    
        if(x1>x2){    //将两个数中较大的数减去较小的数
             y=x1-x2;    //如果最大公约数为x2
             x1=y;   
        }else if(x1<x2){     //如果不等于0,则将x2的值给x1,y的值给x2,继续相减直到差等于0。
             y=x2-x1;
             x2=y;
        }else{
            xunhuan=false;
        }
    }
    return y;
}
public static int way2(int x1,int x2){  //辗转相除法
    int temp=0;
    int y=0;
    while(x1*x2!=0){
        if(x1>x2){     //如果x1>x2,x1=x1-x2,
            y=x1%x2;
            temp=x2;
            x1=y;
        }else if(x1<x2){   //如果x1<x2,x2=x1-x2
            y=x2%x1;
            temp=x1;
            x2=y;
        }   
    }
    return temp;    //返回temp值
}
public static int way3 (int x1,int x2){   //穷举法求最大公约数
    int y=x1;  //定义 把x1的值赋值给y、
    boolean qiongju=true;
    while(qiongju){
        if((x1%y==0)&&(x2%y==0)){  //如果x1,x2能同时被y整除,即y为最大公约数
            return y;
        }
        y--;    
    }
    return x1;
}
}
相关文章
|
2月前
求这两个数的最小公倍数
【10月更文挑战第21天】求这两个数的最小公倍数。
24 4
|
2月前
求两个数的最小公倍数
【10月更文挑战第20天】求这两个数的最小公倍数。
42 4
|
2月前
求这两个数的最大公约数
【10月更文挑战第21天】求这两个数的最大公约数。
15 1
|
7月前
55.输入两个正整数m和n,求其最大公约数和最小公倍数
55.输入两个正整数m和n,求其最大公约数和最小公倍数
49 0
|
7月前
11.09作业详解(弹球距离,素数,最大公约数最小公倍数,求整数位数及其各位数字之和,打印乘法表)
11.09作业详解(弹球距离,素数,最大公约数最小公倍数,求整数位数及其各位数字之和,打印乘法表)
|
人工智能 算法 程序员
求两个正整数的最小公倍数
求两个正整数的最小公倍数
121 1
【每周一坑】​正整数分解质因数 +【解答】计算100以内质数之和
关于分解质因数:每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数。分解质因数只针对合数。
|
算法 C语言
【C语言】输入两个正整数m和n,求其最大公约数和最小公倍数。(要求用while语句实现)
【C语言】输入两个正整数m和n,求其最大公约数和最小公倍数。(要求用while语句实现)
1819 1
|
机器学习/深度学习 算法 Windows
HOW求两个数的最大公约数?
HOW求两个数的最大公约数?
118 0
HOW求两个数的最大公约数?
HOW求两个数的最小公倍数?
HOW求两个数的最小公倍数?
170 0
HOW求两个数的最小公倍数?