JAVA 求最小公因数

news2024/11/23 21:43:33

JAVA 求最小公因数

文章目录

  • JAVA 求最小公因数
    • 方法一:枚举法的第一种
    • 方法一:枚举法的第二种
    • 方法二:展转相除法(欧几里德算法)
    • 方法三:递归
    • 拓展 求最小公倍数公式为

题目:任意输入两个整数,如何求他们的最大公约数?

最大公约数:也称最大公因数,最大公因子,是指两个或多个整数共有约数中最大的一个。

方法一:枚举法的第一种

先输入两个整数,然后比较两个数的大小,大的整数对小的整数求余,若不为0,则让小的整数-1,再继续前面的求余操作,直至最后跳出循环,输出最大公约数。

package CSDN.资料一;

import java.util.Scanner;

/*题目:任意输入两个整数,如何求他们的最大公约数?
*最大公约数:也称最大公因数,最大公因子,是指两个或多个整数共有约数中最大的一个。
* 方法一:枚举法
* 先输入两个整数,然后比较两个数的大小,大的整数对小的整数求余,若不为0,则让小的整数-1,再继续前面的求余操作,直至最后跳出循环,输出最大公约数。
 */
public class GreatestCommonDivisor01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个整数:");
        int n = scanner.nextInt();
        System.out.println("请输入第二个整数:");
        int m = scanner.nextInt();

        //x保存小的那个数
        int x;
        if(m>n){
            x=n;
        }else{
            x=m;
        }

        //大的整数对小的整数求余,若不为0,则让小的整数-1
        while(m%x!=0||n%x!=0){
            x--;
        }
        System.out.println(x);

    }
}

运行结果:
在这里插入图片描述

方法一:枚举法的第二种

package CSDN.资料二;

import java.util.Scanner;

/*
*枚举法
*/
public class GreatestCommonDivisor03 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入一个自然数");
        int a = in.nextInt();
        System.out.println("请再输入一个自然数");
        int b = in.nextInt();

        int gcd = 1;
        for (int i = 2; i <=a&&i<=b ; i++) {
            if(a%i==0&&b%i==0){
               gcd = i;
            }
        }

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


    }
}

方法二:展转相除法(欧几里德算法)

辗转相除法: gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0)
在这里插入图片描述
如果要用辗转相除法求几个数的最大公约数,能够先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是全部这些数的最大公约数。

package CSDN.资料二;

import java.util.Scanner;

/*
* 展转相除法(欧几里德算法)
*/
public class GreatestCommonDivisor04 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入一个自然数");
        int a = in.nextInt();
        System.out.println("请再输入一个自然数");
        int b =in.nextInt();
        int oa = a;
        int ob = b;
        while(b!=0){
            int r = a%b;
            a=b;
            b=r;
        }
        System.out.println(oa+"和"+ob+"的最大公约数是"+a);

    }
}

将上述的方法二封装成方法

package CSDN.资料三.封装成方法;

import java.util.Scanner;

public class GreatestCommonDivisor05 {
    public static void main(String[] args) {
        int a = 0,b=0;
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            a =sc.nextInt();
            b=sc.nextInt();
            System.out.println("欧几里得:"+gcdWhile(a,b));
        }
    }

    public static int gcdWhile(int a,int b){
        while(b>0){
            int temp = a%b;
            a=b;
            b=temp;
        }
        return a;
    }


}


方法三:递归

package CSDN._03资料三.封装成方法.递归;

import java.util.Scanner;

public class GreatestCommonDivisor06 {
    public static void main(String[] args) {
        int a = 0,b=0;
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            a =sc.nextInt();
            b=sc.nextInt();

            System.out.println("递归1:"+gcdRecursion1(a,b));
            System.out.println("递归2:"+gcdRecursion2(a,b));
        }
    }

  public static int gcdRecursion1(int a,int b){
        return b==0?a:gcdRecursion1(b,a%b);
  }

  public static int gcdRecursion2(int a,int b){
        if(a%b==0){
            return b;
        }else{
            return gcdRecursion2(b,a%b);
        }
  }


}


拓展 求最小公倍数公式为

LCM(a ,b) = (a * b) / gcd(a,b)

即 最小公倍数 = 两数之积 / 两数的最大公约数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/964381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用VisualStudio制作上位机(六)

文章目录 使用VisualStudio制作上位机&#xff08;六&#xff09;第五部分&#xff1a;应用程序打包第一步&#xff1a;勾选为Release模式第二步&#xff1a;生成解决方案第三步&#xff1a;将我们额外添加的文件放入到Release这个文件夹里 使用VisualStudio制作上位机&#xf…

400. 第 N 位数字

链接&#xff1a; ​​​​​​400. 第 N 位数字 题解&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 class Solution { public:int findNthDigit(int n) {int len1;//初始数字长度为1int base1;//初始范围为1~9while(n>(long)len…

ROS机器人编程ROS机器人编程---------(三)创建工作空间和功能包

创建工作空间和功能包 创建工作空间 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace编译工作空间 cd ~/catkin_ws/ catkin_make设置环境变量 source devel/setup.bash检查环境变量 echo $ROS_PACKAGE_PATH创建功能包 cd ~/catkin_ws/src catkin_crea…

【word密码】如何限制word文件中部分内容?

Word文件中有一部分内容不想他人编辑&#xff0c;我们可以设置限制编辑&#xff0c;可以对一部分内容设置限制编辑&#xff0c;具体方法如下&#xff1a; 我们将需要将可以编辑的地方选中&#xff0c;然后打开限制编辑功能 然后勾选限制编辑设置界面中的【限制编辑】和【每个人…

RT-Thread 中断管理学习(一)

中断管理 什么是中断&#xff1f;简单的解释就是系统正在处理某一个正常事件&#xff0c;忽然被另一个需要马上处理的紧急事件打断&#xff0c;系统转而处理这个紧急事件&#xff0c;待处理完毕&#xff0c;再恢复运行刚才被打断的事件。生活中&#xff0c;我们经常会遇到这样…

LDAP服务器如何重启

1、find / -name ldap 该命令只会从根路径下查看ldap文件夹 find / -name ldap2、该命令会从根路径/查看所有包含ldap路径的文件夹&#xff0c;会查询出所有&#xff0c;相当于全局查询 find / -name *ldap*2、启动OpenLADP 找到LDAP安装目录后&#xff0c;执行以下命令 #直…

Mysql主从服务安装配置

1.下载地址 MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/ 2.安装配置 1.下载解压后&#xff0c;拷贝一份作为slave的安装目录 3.配置my.ini 由于下载mysql8版本&#xff0c;解压后&#xff0c;没有相关的my…

每日一题-动态规划(从不同类型的物品中各挑选一个,使得最后花费总和等于1000)

四种类型的物品&#xff0c;每一种类型物品数量都是n&#xff0c;先要从每种类型的物品中挑选一件&#xff0c;使得最后花费总和等于1000 暴力做法10000^4 看到花费总和是1000&#xff0c;很小且固定的数字&#xff0c;肯定有玄机&#xff0c;从这里想应该是用dp&#xff0c;不…

数据库-DQL

DQL&#xff1a;用来查询数据库表中的记录 关键字&#xff1a;SELECT 语法&#xff1a; select&#xff1a;字段列表 from&#xff1a;表名列表 where&#xff1a;条件列表 group by&#xff1a;分组列表 having&#xff1a;分组后条件列表 order by&#xff1a;排序字段列表…

解决windows下安装python并终端运行python弹出windows商店的最终解决方案

最近在windows下安装了python&#xff0c;在终端中运行python命令的时候总是会弹出windows商店 为了解决这个问题&#xff0c;我修改系统的环境变量也一直不起作用&#xff0c;只有指定绝对路径时才能正常启动&#xff0c;这个问题困扰了我很长一段时间&#xff0c;后来了解到…

Linux知识点 -- Linux多线程(四)

Linux知识点 – Linux多线程&#xff08;四&#xff09; 文章目录 Linux知识点 -- Linux多线程&#xff08;四&#xff09;一、线程池1.概念2.实现3.单例模式的线程池 二、STL、智能指针和线程安全1.STL的容器是否是线程安全的2.智能指针是否是线程安全的 三、其他常见的各种锁…

Window11下载安装jdk8-jdk11与环境变量的配置

目录 一、下载jdk 二、安装jdk 三、配置环境变量 四、检查JDK是否配置成功 一、下载jdk jdk8下载链接&#xff1a;请点击网址 jdk11下载链接&#xff1a;请点击网址 二、安装jdk 按照提示一步一步安装即可。 默认安装位置&#xff1a;C:\Program Files\Java 三、配置…

NetSuite海鲜书 - 知识会汇编 用户篇 2023

NetSuite2021年初夏&#xff0c;NetSuite知识会成立。它由本人&#xff0c;上海德之匠信息技术有限公司的毛岩喆&#xff08;江湖人称Rick&#xff09;发起建立。建立的初衷秉承Rick个人博客“学问思辨&#xff0c;企业信息化路上的行者”的理念&#xff0c;期望能够在NetSuite…

linux操作系统中的动静态库(未完)

1. 静态库与动态库 静态库&#xff08;.a&#xff09;&#xff1a;程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库动态库&#xff08;.so&#xff09;&#xff1a;程序在运行的时候才去链接动态库的代码&#xff0c;多个程序共享使用库的…

复旦国际MBA《人力分析战略》课程深度探讨最优解决方案

“近年来的各种社会变化和不确定性极大地促使我们真正重新审视我们的工作条件&#xff0c;以及思考如何呈现最好的工作和生活状态。”MIT斯隆管理学院Emilio J. Castilla教授指出&#xff0c;“由于期望发生了变化&#xff0c;无论是管理者还是员工&#xff0c;对工作场所的看法…

Java后端开发面试题——多线程

创建线程的方式有哪些&#xff1f; 继承Thread类 public class MyThread extends Thread {Overridepublic void run() {System.out.println("MyThread...run...");}public static void main(String[] args) {// 创建MyThread对象MyThread t1 new MyThread() ;MyTh…

C++ - 继承

继承的概念 继承机制是面向对象程序设计当中&#xff0c;非常重要且好用的手段&#xff0c;这种手段可以允许程序员在原有的类的特性基础之上&#xff0c;进行拓展从而产生新的类&#xff0c;这些新产生的类&#xff0c;我们成为派生类。在以前&#xff0c;我们实现的复用是函数…

【计算机基础】Git从安装到使用,详细每一步!扩展Github\Gitlab

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

Java网络编程-Socket实现数据通信

文章目录 前言网络编程三要素IP地址和端口号传输协议Socket 使用Scoket实现网络通信TCPTCP通信-发送方TCP通信-接收方结果 UDPUDP通信-发送方UDP通信-接收方结果 总结 前言 本文主要是为下一篇Websockt做铺垫&#xff0c;大家了解socket的一些实现。 网络编程三要素 网络编程…

最小二乘法处理线性回归

最小二乘法是一种数学优化技术&#xff0c;用于查找最适合一组数据点的函数。 该方法主要用于线性回归分析&#xff0c;当然&#xff0c;也可用于非线性问题。 开始之前&#xff0c;我们先理解一下什么是回归。 回归&#xff1a;回归是一种监督学习算法&#xff0c;用于建模和…