Java求两个数的最大公约数及最小公倍数、求多个数的最大公约数及最小公倍数
今天参加腾讯笔试,做编程题时在最小公倍数、最大公约数这些这么简单的知识点上卡壳了,自信心受到强烈的打击,下来后猛复习了这方面的相关编程知识。
有以下几个关键点:
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求两个数的最大公约数及最小公倍数、求多个数的最大公约数及最小公倍数相关推荐
- python求两数最大公因数_『用python求俩个数的最大公约数和最小公倍数』
python:用递归的方法编写一个函数gys(x,y),计算两个数字的最大公约数. (提示,大的 def gys(x,y): a,b=max(x,y),min(x,y) c=a%b if c==0: ...
- Java实验——定义一个类,该类中包含以下几个方法(静态):实现两个字符串数组的逆序排序,输出结果为字符串数组;求两个整形数组的交集;求两个浮点型数组的并集;
目录 一.实现两个字符串数组的逆序排序,输出结果为字符串数组 解题思路: 具体代码: 运行截图: 二.求两个整形数组的交集 具体代码: 运行截图: 三.求两个浮点型数组的并集 解题思路: 具体代码: ...
- js求两圆交点_利用二项式通项公式求系数及综合运用(2)
更多资料获取,添加qq群:639636957 更多精彩,请点击上方蓝字关注我们! 二项式通项公式的基本应用 1 题目 2 视频讲解 3 答案 4 知识点 往期视频汇总 每日一题第1题之数列对数型不等式 ...
- Java输入两个正整数m和n,求其最大公约数和最小公倍数。
import java.util.Scanner;public class Test6 {//欧几里德 辗转相除法public static int gcd(int a,int b) {int r ; ...
- python 求两线段是否相交,如果相交求交点
代码如下,cal_point = False 不输出交点,cal_point = True 输出交点 def cross(p1,p2,p3):#跨立实验 x1=p2.x-p1.x y1 ...
- 算法之美——求两直线交点(三维叉积)——求四边形面积(二维叉积)
一般方程法: 直线的一般方程为F(x) = ax + by + c = 0.既然我们已经知道直线的两个点,假设为(x0,y0), (x1, y1),那么可以得到a = y0 – y1, b = x1 ...
- 求两条曲线的交点 matlab,matlab求两条曲线交点
用Matlab 实现了 3 次样条曲线插值的算法.边界条件取为自然边界条件,即:... 二元一次函数曲线拟合的Matlab实现_IT/计算机_专业资料.第 27 卷 1... (x1)); y2=in ...
- java递归算法之求两个数的最大公约数
改下包名即可运行 package cn.blk5;public class CommonDivisor {/*** @author: LIWEI* @updateTime: 2019-06-24 12 ...
- 一个数里有那些约数用c++怎么做_两数的最大公约数你会求吗?(内附完整算法代码)...
两个数的最大公约数怎么求? 思考题目的同时,我在这也顺便发出三个灵魂疑问? 什么又是更相减损法? 什么又是辗转相除法? 什么又是欧几里得算法? 不懂没关系,往下看 要解决两数的最大公约数问题?,你首先 ...
最新文章
- 【转载】从30岁到35岁,为你的生命多积累一些厚度
- nginx epoll详解
- edittext实现自动查询,刷新listview
- CentOs6.5 修改主机名
- 是用于mac的linux,用于Mac OS X的Can(CUPS)ppd文件可用于Linux吗?
- java ide eclipse,java IDE Eclipse
- php文件如何转换成mp4,qlv文件如何转换成mp4 怎样把下载好的qlv格式视频转换成MP4格式...
- 2022年各国程序员薪资排名!
- MySQL查询上周(从周一~周日)
- macOS Monterey 12.6.2 (21G320) 正式版 ISO、IPSW、PKG 下载
- JavaScript的BOM(浏览器对象模型)部分知识点与DOM(文档对象模型)
- 人物-作家-卡耐基:戴尔·卡耐基
- xx:xx,xx:xx规则的字符串怎么解析呢
- 【Unity 手写PBR】补充:多光源 阴影 视差 自发光
- 期许2016 迎新春技术分享沙龙总结
- PLC通过智能网关 MQTT对接阿里云(带CA证书加密),实现物模型数据显示
- 消防工程师 第二篇 建筑防火 6.1 安全疏散
- iOS小技巧11-Xcode中相对路径和绝对路径的使用
- 万字详解5G车联网技术
- 泡沫?玩笑?PlusFo才是“复仇”利器