火山日常啰嗦

今天参加腾讯笔试,做编程题时在最小公倍数、最大公约数这些这么简单的知识点上卡壳了,自信心受到强烈的打击,下来后猛复习了这方面的相关编程知识。

有以下几个关键点:

1、任意正整数的最大公约数、最小公倍数都是它本身。

2、求两个数的最大公约数(递归法、相减法、辗转相除法)

3、求两个数的最小公倍数,两个数的最小公倍数与它们的最大公约数之间存在如下关系:

某两个数a,b的最小公倍数=(a*b)/a与b的最大公约数

4、求多个数的最大公约数可以拆解成求两个数的最大公约数的过程

5、求多个数的最小公倍数可以拆解成求两个数的最小公倍数的过程

详细解析都在以下代码中:

public class Main {

// 递归法

public static int MaxCommonNum(int left , int right){

/**

* 我始终让left>right,这不是硬性要求哈,只是我个人的编程习惯

*/

if(left

int temp = left;

left = right;

right = temp;

}

if((left%2!=0 || right%2!=0)&&(left%right!=0)) return 1;

else if((left%2!=0 || right%2!=0)&&(left%right==0)) return right;

else return 2*MaxCommonNum(left/2,right/2);

}

// 相减法

/**

* @param left

* @param right

* @return

* 1 若a>b,则a-=b

* 2 若a

* 3 若a==b,则a(或者b)就是所求的最大公约数

* 4 若a!=b,则回去执行1、2步骤

*/

public static int MaxCommonNum1(int left , int right){

if(left==right) return left;

if(left>right) left-=right;

else right-=left;

return MaxCommonNum1(left,right);

}

// 辗转相除法

/**

* @param left

* @param right

* @return

* 若要用left对right取模,那么要保证left>=right(反之亦然)

* 1 若left%right==0,则right就是所求的最大公约数

* 2 若left%right!=0,则将right的值赋给left,将left%riht的值赋给right,即left=right,right=left%right,然后再取模,判断余数是否为0

* 3 重复这些步骤,直到left%right==0,则right就是所求的最大公约数

*

* */

public static int MaxCommonNum2(int left , int right){

if(left

int temp = left;

left = right;

right = temp;

}

if(left%right==0) return right;

else return MaxCommonNum2(right,left%right);

}

// 求多个数的最大公约数,借助求两个数的最大公约数的方法来求

/**

*

* @param arr

* @return

* 求多个数的最大公约数,那么可以传入一个数组int arr[]

* 1 取arr[0]赋给temp(某个正整数的最大公约数是它本身),然后通过求两个数的最大公约数的方法先求出temp与arr[1]的最大公约数,将结果赋给temp,则temp表示arr[0]与arr[1]的最大公约数

* 2 然后再求temp与arr[2]的最大公约数,将结果赋给temp

* 3 循环直到temp与剩余的每个数都求过最大公约数了,那么最后所求的那个就是这组数的最大公约数了

*

*/

public static int MaxCommonNumFromMultiNumbers(int arr[]){

int temp = arr[0];

for(int i=1;i

temp = MaxCommonNum(temp,arr[i]);

}

return temp;

}

// 求两个数的最小公倍数

/**

*

* @param left,right

* 两个数a,b的最小公倍数=(a*b)/a与b的最大公约数

*

*/

public static int MinCommonNum(int left,int right){

return left*right/MaxCommonNum(left,right);

}

// 求多个数的最小公倍数

/**

*

* @param arr

* @return

* 求多个数的最小公倍数跟求多个数的最大公约数的方法一样

*/

public static int MinCommonNumFromNumbers(int arr[]){

int temp = arr[0];

for(int i=1;i

temp = MinCommonNum(temp,arr[i]);

}

return temp;

}

public static void main(String[] args) {

// 求两个数的最大公约数,有三种方法:

// 1、递归法

// 2、相减法

// 3、辗转相除法

// 求多个数的最大公约数,借助求两个数的最大公约数的方法来求

// 递归法

System.out.println(MaxCommonNum(3,5));

System.out.println(MaxCommonNum(12,8));

// 相减法

System.out.println(MaxCommonNum1(3,5));

System.out.println(MaxCommonNum1(12,8));

// 辗转相除法

System.out.println(MaxCommonNum2(3,5));

System.out.println(MaxCommonNum2(12,8));

// 求多个数的最大公约数

int[] arr = {1,2,3,4,5,6};

System.out.println(MaxCommonNumFromMultiNumbers(arr));

// 求两个数的最小公倍数

System.out.println(MinCommonNum(3,5));

System.out.println(MinCommonNum(12,8));

// 求多个数的最小公倍数

int[] array = {4,5,6};

int[] array1 = {1,2,3,4,5,6};

System.out.println(MinCommonNumFromNumbers(array));

System.out.println(MinCommonNumFromNumbers(array1));

}

}

有误之处望请指出,望共同进步。感谢!

用java求两个数的最大公因数_Java求两个数的最大公约数及最小公倍数、求多个数的最大公约数及最小公倍数...相关推荐

  1. java 两个list排序_java实现两个不同list对象合并后并排序

    工作上遇到一个要求两个不同list对象合并后并排序 1.问题描述 从数据库中查询两张表的当天数据,并对这两张表的数据,进行合并,然后根据时间排序. 2.思路 从数据库中查询到的数据放到各自list中, ...

  2. java怎么计算相隔多少天_java计算两个日期之间相差天数和相隔天数详解

    大家看到文章标题"两个日期之间相差天数和相隔天数",是否有疑惑呢!从中文字面理解,"相差"和"相隔"是有区别的,然而就是这些区别害死很多人, ...

  3. java判断两个int相等_Java 判断两个变量是否相等

    判断两个变量是否相等的方式有两种:利用运算符 == 利用equals方法 (1)比较基本Java基本数据类型 比较基本数据类型,只能用"==",不能用equals,这里比较的是两个 ...

  4. java两个字符串前缀_java – 找到两个字符串的最长公共前缀

    我想找到两个字符串的最长公共前缀. 有没有办法循环我的最后几个if语句,以便我可以结束彼此不匹配的最后几个字符? System.out.println("Enter the first st ...

  5. java某个时间推迟60天_java计算两个时间相差(天、小时、分钟、秒)

    public static long dateDiff(String startTime, String endTime, String format, String str) { // 按照传入的格 ...

  6. java保留两位小数怎么_java保留两位小数4种方法

    java保留两位小数4种方法 Java中保留小数有四种方法,如下: public class Format { double f = 23065.57845; public void m1() { B ...

  7. java比较两个字符串变量_Java 比较两个字符串内容是否相等

    最近在做松哥的微人事项目时,编写SpringBoot后台接口时遇到一个小问题,就是当比较两个String对象内容是否相等时,我第一次使用==没有得到预想到的结果,改成String的equals()方法 ...

  8. java里怎么判断时间重合_java 判断两个时间段是否重叠的案例

    最近业务上遇到需要判断两个时间段是否存在重叠的情况,网上找了不少代码.大佬们的思路过于简洁了,有些理解不了.还只是个菜鸟码农,还是多锻炼锻炼自己的思路. 思路很简单:定义一个时间段的概念,既然是时间段 ...

  9. java两个时间相加_Java程序两个日期相加

    Java程序两个日期相加 在此程序中,您将学习使用Calendar在Java中两个日期相加. 因为Java纪元是1970年,所以Date对象表示的任何时间都不工作.这意味着,您的日期将从1970年开始 ...

  10. java两个矩阵相乘_java计算两个n阶矩阵相乘

    自己是个新手,研究java数据结构,看到两个n阶矩阵相乘的题目,自己就试着写了一个简单的demo,哪里有不好的地方,也希望大家多提提意见,直接上代码了: package com.shujujiegou ...

最新文章

  1. 机器学习-Sklearn
  2. php+json对象格式,PHP 创建对象来输出 JSON 格式
  3. 反思避免只是小聪明:更加稳重 更加踏实
  4. 查看Linux系统架构类型的5条常用命令
  5. leetcode1448. 统计二叉树中好节点的数目(dfs)
  6. java post返回xml数据类型_Java 通过HttpURLConnection Post方式提交xml,并从服务端返回数据...
  7. Java下的可视化开发工具使用 WindowBuilder Pro
  8. 20200219:不同路径Ⅱ(leetcode63)
  9. php去除emoji表情代码
  10. 华为办公协作与远程视频会议软件Link Now停止运营 请及时备份数据
  11. 2022高频面试题之css篇
  12. Rust 最受喜爱却少有人用,Python 仅排第六,2021 全球开发者调查报告出炉
  13. gs 服务器文件,服务器gs
  14. 故障案例:连接服务器失败/服务器无法上网
  15. 详解人工智能的五大思想流派 元芳你支持哪一派?
  16. 蓝牙耳机连Stereo mode上win10后没有声音?
  17. Cocos2d-x的多线程与异步加载实现详解
  18. 构建一个类book,其中含有2个私有数据成员qu和price,建立一个有5个元素的数组对象,将qu初始化为1~5,将price初始化为qu的10倍。
  19. 可以在Facebook Marketplace 上面买亚马逊雨林?
  20. 计算机核心基础知识2

热门文章

  1. python读取csv最后一行_用Python读取CSV文件行的最后一个非空单元格
  2. 断网重启路由器就好_电脑老断网重启就好怎么解决
  3. 程序员该怎么创业才比较靠谱?
  4. 用户与计算机的交互界面是什么,终于知道交互界面设计是什么
  5. CentOS7.9 查询内网ip
  6. Excel两列数据对比,找出重复数据
  7. Java通过mysql-connector-java-8.0.11连接MySQL Server 8.0遇到的问题
  8. 计算机研究生论文多少字,研究生一篇论文需要多少字?
  9. SitePoint播客#43:被动共享
  10. pandas删除最后一列_Python中pandas dataframe删除一行或一列:drop函数详解