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

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

作业要求:


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;
}
}
相关文章
|
7月前
|
API UED 开发者
Harmony OS Next玩转多层级手势事件:当组件遇上“套娃”,触摸该怎么分家?
在HarmonyOS开发中,处理多层级手势事件是一项挑战,尤其在“组件套组件”的复杂布局下。本文深入探讨了触摸事件的基础原理、父子组件间的手势竞争规则以及如何通过`responseRegion`和`hitTestBehavior`等属性自定义触摸分发逻辑。同时介绍了`.gesture()`、`.priorityGesture()`和`.parallelGesture()`三种手势绑定方法,帮助开发者灵活调整手势优先级。掌握这些技巧,可精准控制复杂交互中的触摸行为,提升用户体验。
|
移动开发 前端开发 JavaScript
JS配合canvas实现贪吃蛇小游戏_升级_丝滑版本_支持PC端和移动端
本文介绍了一个使用JavaScript和HTML5 Canvas API实现的贪吃蛇游戏的升级版本,该版本支持PC端和移动端,提供了丝滑的转向效果,并允许玩家通过键盘或触摸屏控制蛇的移动。代码中包含了详细的注释,解释了游戏逻辑、食物生成、得分机制以及如何响应不同的输入设备。
615 1
JS配合canvas实现贪吃蛇小游戏_升级_丝滑版本_支持PC端和移动端
|
设计模式 算法 Java
如何优雅的用策略模式,取代臃肿的 if-else 嵌套,看这篇就够了
如何优雅的用策略模式,取代臃肿的 if-else 嵌套,看这篇就够了
1307 0
如何优雅的用策略模式,取代臃肿的 if-else 嵌套,看这篇就够了
|
传感器 小程序 物联网
智能电动车无感解锁方案:设备篇
智能电动车无感解锁方案:设备篇
智能电动车无感解锁方案:设备篇
|
Python
快看看用Python生成Excel炫酷图表,不然你就OUT了
快看看用Python生成Excel炫酷图表,不然你就OUT了
615 0
快看看用Python生成Excel炫酷图表,不然你就OUT了
|
搜索推荐 Go 开发工具
【Framework】🤡 速通 Android AOSP基础(中)
本文并非笔者亲身实践,是借鉴了参考文献处几位大佬的文章总结得出。asop源码的下载费时,笔者没有编译扫写源码的需求,只是解BUG或了解底层机制时看看源码,SDK自带的android.jar和一些在线源码站点已经够用。环境搭建流程基本是一致的,遇到问题善用搜索引擎~
677 0
|
安全 Shell 网络安全
看完这篇 教你玩转渗透测试靶机vulnhub——DC6
看完这篇 教你玩转渗透测试靶机vulnhub——DC6
474 0
看完这篇 教你玩转渗透测试靶机vulnhub——DC6
|
域名解析 网络协议 Shell
内网隧道与SOCKS代理思路总结
内网中有很多边界设备,比如防火墙。这种边界设备会控制内部主机的对外连接,一般会仅允许某些种类的端口开放或某种数据流量出入 这就意味着我们只能通过有限的选择,来绕过防火墙限制,与目标内网中的机器通信,这就需要隧道了,外观表现为各种端口转发连接,深层次还是隧道的思想 一般按照OSI模型也把隧道按照不同层的协议划分为网络层隧道、传输层隧道、应用层隧道,按部就班(老套路了) 本文只做思路总结,比较简单(懒)没啥演示的空间....... 如果有跨网段不通的地方请脑补自行添加路由
1011 0
内网隧道与SOCKS代理思路总结
MFC学习——如何在MFC对话框中添加一个显示网页的窗口(用vs2017以下版本,vs2017不支持)
MFC学习——如何在MFC对话框中添加一个显示网页的窗口(用vs2017以下版本,vs2017不支持)
551 0
nodejs 如何检测端口可用性
nodejs 如何检测端口可用性