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

有以下几个关键点:
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<right){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<b,则b-=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<right){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<arr.length;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<arr.length;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));}
}

有误之处望请指出,望共同进步。感谢!
链接:https://www.jianshu.com/p/871282e358a1

Java求两个数的最大公约数及最小公倍数、求多个数的最大公约数及最小公倍数相关推荐

  1. python求两数最大公因数_『用python求俩个数的最大公约数和最小公倍数』

    python:用递归的方法编写一个函数gys(x,y),计算两个数字的最大公约数. (提示,大的 def gys(x,y): a,b=max(x,y),min(x,y) c=a%b if c==0: ...

  2. Java实验——定义一个类,该类中包含以下几个方法(静态):实现两个字符串数组的逆序排序,输出结果为字符串数组;求两个整形数组的交集;求两个浮点型数组的并集;

    目录 一.实现两个字符串数组的逆序排序,输出结果为字符串数组 解题思路: 具体代码: 运行截图: 二.求两个整形数组的交集 具体代码: 运行截图: 三.求两个浮点型数组的并集 解题思路: 具体代码: ...

  3. js求两圆交点_利用二项式通项公式求系数及综合运用(2)

    更多资料获取,添加qq群:639636957 更多精彩,请点击上方蓝字关注我们! 二项式通项公式的基本应用 1 题目 2 视频讲解 3 答案 4 知识点 往期视频汇总 每日一题第1题之数列对数型不等式 ...

  4. Java输入两个正整数m和n,求其最大公约数和最小公倍数。

    import java.util.Scanner;public class Test6 {//欧几里德 辗转相除法public static int gcd(int a,int b) {int r ; ...

  5. python 求两线段是否相交,如果相交求交点

    代码如下,cal_point = False 不输出交点,cal_point = True 输出交点 def cross(p1,p2,p3):#跨立实验     x1=p2.x-p1.x     y1 ...

  6. 算法之美——求两直线交点(三维叉积)——求四边形面积(二维叉积)

    一般方程法: 直线的一般方程为F(x) = ax + by + c = 0.既然我们已经知道直线的两个点,假设为(x0,y0), (x1, y1),那么可以得到a = y0 – y1, b = x1 ...

  7. 求两条曲线的交点 matlab,matlab求两条曲线交点

    用Matlab 实现了 3 次样条曲线插值的算法.边界条件取为自然边界条件,即:... 二元一次函数曲线拟合的Matlab实现_IT/计算机_专业资料.第 27 卷 1... (x1)); y2=in ...

  8. java递归算法之求两个数的最大公约数

    改下包名即可运行 package cn.blk5;public class CommonDivisor {/*** @author: LIWEI* @updateTime: 2019-06-24 12 ...

  9. 一个数里有那些约数用c++怎么做_两数的最大公约数你会求吗?(内附完整算法代码)...

    两个数的最大公约数怎么求? 思考题目的同时,我在这也顺便发出三个灵魂疑问? 什么又是更相减损法? 什么又是辗转相除法? 什么又是欧几里得算法? 不懂没关系,往下看 要解决两数的最大公约数问题?,你首先 ...

最新文章

  1. 【转载】从30岁到35岁,为你的生命多积累一些厚度
  2. nginx epoll详解
  3. edittext实现自动查询,刷新listview
  4. CentOs6.5 修改主机名
  5. 是用于mac的linux,用于Mac OS X的Can(CUPS)ppd文件可用于Linux吗?
  6. java ide eclipse,java IDE Eclipse
  7. php文件如何转换成mp4,qlv文件如何转换成mp4 怎样把下载好的qlv格式视频转换成MP4格式...
  8. 2022年各国程序员薪资排名!
  9. MySQL查询上周(从周一~周日)
  10. macOS Monterey 12.6.2 (21G320) 正式版 ISO、IPSW、PKG 下载
  11. JavaScript的BOM(浏览器对象模型)部分知识点与DOM(文档对象模型)
  12. 人物-作家-卡耐基:戴尔·卡耐基
  13. xx:xx,xx:xx规则的字符串怎么解析呢
  14. 【Unity 手写PBR】补充:多光源 阴影 视差 自发光
  15. 期许2016 迎新春技术分享沙龙总结
  16. PLC通过智能网关 MQTT对接阿里云(带CA证书加密),实现物模型数据显示
  17. 消防工程师 第二篇 建筑防火 6.1 安全疏散
  18. iOS小技巧11-Xcode中相对路径和绝对路径的使用
  19. 万字详解5G车联网技术
  20. 泡沫?玩笑?PlusFo才是“复仇”利器

热门文章

  1. 一个简单的抽奖转盘游戏
  2. C语言实现 扑克牌 (4种玩法) 洗牌,发牌,整理牌
  3. SpringBoot @Conditional
  4. MySQL锁类型及作用
  5. 数据科学理论基础知识汇总---《数据科学理论与实践(第二版)》第二章
  6. 黑莓开发之环境的搭建
  7. h2 mysql模式_使用H2的MixedMode模式
  8. Kubernetes学习总结(3)——一年时间打造全球最大规模之一的Kubernetes集群,蚂蚁金服怎么做到的?
  9. unity 3D模型展示旋转缩放
  10. 5G NR协议栈及功能1 - 总体架构与物理层