java求约数_[转载]Java求最大公约数与最小公倍数
(看到一份不错的总结,拿来收着)
如果数a能被数b整除,a就叫做b的倍数,b就叫做作a的约数.约数和倍数都表示一个数与另一个数的关系,不能单独存在.如只能说16是某数的倍数,2是某数的约数,而不能孤立地说16是倍数,2是约数.
“倍”与“倍数”是不同的两个概念,“倍”是指两个数相除的商,它可以是整数、小数或者分数.“倍数”只是在数的整除范围内,相对于“约数”而言的一个数字概念,表示的是能被某一个自然数整除的数,它必须是一个自然数.
(1)最大公约数
最大公约数:几个自然数公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数。
例如:12,16的公约数有1,2,4,其中最大的一个是4,4是12与16的最大公约数,一般记为(12,16)=4.12,15,18的最大公约数是3,记为(12,15,18)=3.
常用的求最大公约数的方法是短除法和分解质因数法.
短除法:开始时用观察比较的方法,即:先把每个数的约数找出来,然后再找出公约数,最后在公约数中找出最大公约数。
例如:求12与18的最大公约数。
短除法例题
12的约数有:1、2、3、4、6、12。
18的约数有:1、2、3、6、9、18。
12与18的公约数有:1、2、3、6。
12与18的最大公约数是6。
这种方法对求两个以上数的最大公约数,特别是数目较大的数,显然是不方便的。于是又采用了给每个数分别分解质因数的方法。
分解质因数法:把每个数分别分解质因数,再把各数中的全部公有质因数提取出来连乘,所得的积就是这几个数的最大公约数.例如,求24和60的最大公约数.24=2×2×2×3,60=2×2×3×5,24与60的全部公有的质因数是2,2和3,它们的积是2×2×3=12,所以(24,60)=12.
除了这两种方法外,还有一种辗转相除法:
在数学中,辗转相除法,又称欧几里得算法,是求最大公约数的算法。
两个数求最大公约数,可以用辗转相除法。始终用较大数(被除数)除以较小数(除数),然后用除数代替较大数(被除数),余数代替较小数(除数),代替完后继续让新的被除数除以除数。直到相除余数为0时。最后的除数就是最大公约数。举例:
222 407求最大公约数:
222 407(407除以222余数185)
222 185(222除以185余数37)
37 185(185除以37余数0)
所以最大公约数为37
39 24求最大公约数
39 24(39/24,余数15)
15 24(24/15,余数9)
15 9(15/9,余数6)
6 9(9/6,余数3)
6 3(6/3,余数0)
所以最大公约数为3
辗转相除法可以用来计算两个自然数的最大公约数,那若要计算多个自然数的最大公约数呢?
答:求几个自然数的最大公约数,可以先求出其中两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个为止。最后所得的那个最大公约数,就是所求的几个数的最大公约数。
(求多个数的最小公倍数时也是同样的道理)
(2)最小公倍数
最小公倍数:几个数公有的倍数叫做这几个数的公倍数,其中最小的一个叫做这几个数的最小公倍数。数学上常用方括号表示。如[12,18,20]即12、18和20的最小公倍数。
最小公倍数的求法:
求几个自然数的最小公倍数,同样也可以采用分解质因数法和短除法
<1>
分解质因数法:先把这几个数分解质因数,再把它们一切公有的质因数和其中几个数公有的质因数以及每个数的独有的质因数全部连乘起来,所得的积就是它们的最小公倍数。
例如,求[12,18,20],因为12=2^2×3,18=2×3^2,20=2^2×5,其中三个数的公有的质因数为2,两个数的公有质因数为2与3,每个数独有的质因数为5与3,所以,[12,18,20]=2^2×3^2×5=180。
<2> 短除法:
其实只要求出了最大公约数就能直接求最小公倍数了。可利用下面这条公式
两个数相乘等于这两个数的最大公约数和最小公倍数的积。
java案例:
《1》求两个数的最大公约数和最小公倍数(杭电ACM--1108有类似的题)
解法:用辗转相除法先求出最大公约数,再通过公式:两个数相乘等于这两个数的最大公约数和最小公倍数的积。求出最小公倍数
代码如下:
import java.util.Scanner;
public class Test1018 {
//求最大公约数
public static int commonDivisor(int n,int m){
//辗转相除是用大的除以小的。如果n
while(n%m!=0){
int temp=n%m;
n=m;
m=temp;
}
return m;
}
//求最小公倍数
public static int commonMultiple(int n,int m){
return n*m/commonDivisor(n,m);
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
System.out.println(commonMultiple(n,m));
System.out.println(commonDivisor(n,m));
}
}
《2》根据用户输入的个数,求出这些数的最小公倍数,以杭电ACM--2028为例
Lowest Common Multiple Plus
Problem
Description
求n个数的最小公倍数。
Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
Sample Input
2 4
6
3 2 5
7
Sample Output
12
70
代码如下:
import
java.util.Scanner;
public class Test2028 {
//求两个最大公约数
public static long commonDivisor(long n,long m){
//辗转相除是用大的除以小的。如果n
while(n%m!=0){
long temp=n%m;
n=m;
m=temp;
}
return m;
}
//求两个数最小公倍数
public static long commonMultiple(long n,long m){
return n*m/commonDivisor(n,m);
}
//求多个数的最小公倍数
public static long commonMultiple(long[] a){
long value=a[0];
for(int i=1;i
value=commonMultiple(value,a[i]);
}
return value;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
long[] a=new long[n];
for(int i=0;i
a[i]=sc.nextLong();
}
System.out.println(commonMultiple(a));
}
}
}
java求约数_[转载]Java求最大公约数与最小公倍数相关推荐
- java string()函数_转载java String.split()函数的用法详解
转载java String.split()函数的用法详解 如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!在java.lang包中有String.split()方法的原型是: p ...
- java形状类_[转载]JAVA 设计一个形状类Shape 求周长和面积
设计一个形状类Shape,方法:求周长和求面积 形状类的子类:Rect(矩形),Circle(圆形) Rect类的子类:Square(正方形) 不同的子类会有不同的计算周长和面积的方法 创建三个不同的 ...
- java生成水印_[转载]java操作word生成水印
应用场景 为了保护版权或辨别文件的真伪,有时需要在生成的Word文件中动态添加水印,PageOffice组件的WaterMark类就封装了给在线编辑的Word文件添加水印这一功能,调用接口非常简单. ...
- java实现图形界面输入半径求圆面积_自学java真的很难吗?学到什么程度才能进大厂?...
这里我做一个统一答疑,这些东西真不是你一个刚学习Java的人该看的,也不是你工作第一年应该去看的东西,不要总在某些地方看到一些词就跟风.技术这门活,你入行了就会发现,还有更广阔的技术栈,更多的开源项目 ...
- java对象工厂池_[转载]Java对象池技术的原理及其实现
作者:汪永好 出处:计算机与信息技术 责任编辑: 方舟 [ 2006-11-25 07:00 ] 摘 要 :本文在分析对象池技术基本原理的基础上,给出了对象池技术的两种实现方式.还指出了使用对象池技术 ...
- java生成sm2证书_(转载)Java使用IText实现PDF签章
前文讲到了如何使用Adobe的PDF工具软件进行电子印章应用.在实际应用中还有一种情形就是需要将电子印章功能集成在我们开发的系统里,这里就要用到一些PDF的二次开发库了.做过相关开发的同学应该知道常用 ...
- java 分割一个_分割java
[java]分割字符串工具类,霸气 jdk自带的 java 分割字符串,分割string,可以根据多个条件去分割.比如逗号,分号,逗号或者分号. 比如一个字符串:"abc,def;gh,ij ...
- java 编程题_最新JAVA编程题全集(50题及答案)92862
<最新JAVA编程题全集(50题及答案)92862>由会员分享,可在线阅读,更多相关<最新JAVA编程题全集(50题及答案)92862(32页珍藏版)>请在人人文库网上搜索. ...
- java动态类加载_实现Java动态类载入机制
作 为 充 分 利 用Java 的 动 态 类 载 入 机 制 的 最 好 例 子, 带 有Java 扩 展 的Web 浏 览 器 根 据 请 求 从 网 络 或 本 地 文 件 系 统 中 动 态 ...
最新文章
- java 中如何正确的停止线程
- 客户关系管理系统-CRM源码
- linux文件系统启动流程 ---笔记整理
- linux gnome3安装_Windows 10安装与管理WSL体验原生Linux系统
- Eclipse之如何导入arr文件
- 愿你的指下有代码,眼里有星辰
- 开工大吉:Oracle 18c已经发布及新特性介绍
- PYTHON1.day07
- ros先订阅后发布 无法收到消息的解决办法
- python学生信息管理系统 实验报告_Python学生信息管理系统的开发
- 一周项目实战系列--SpringBoot实现微信点餐系统(1)
- 胡晓明的“出埃及记”,他将带领支付宝驶向何方?
- 1#组合数学初步——排列与组合之加法原理、乘法原理
- Sublime Text 3破解补丁
- 请求转发 tomcat 404错误
- 内存管理基本原理及非ARC环境使用小心得
- C# 实现实时网速
- 如何在Excel中的每个打印页面上重复特定的行或列
- Android 万能遥控 开源,快速实现WIFI红外遥控器(ESP8266 SoC模式)
- 微信与朋友圈后台架构
热门文章
- 什么触控笔好用又便宜?口碑超好的触控笔推荐
- 【Linux】生产者消费者模型
- 磁场传感器(指北针)
- 发挥搜索引擎和工具书的大作用
- python批量评论_手把手教你 Python挖掘用户评论典型意见并自动生产报告
- Python 模拟双色球抽奖
- ipad 计算机连接网络设置方法,iPad Air怎么设置上网 苹果平板设置上网步骤【图文】...
- 男女Java_梦幻都市-心动男女
- Linux系统安装rpm文件:error: can‘t create transaction lock on /var/lib/rpm/.rpm.lock
- 计算机综合评价论文,关于模糊综合评价记忆计算机英语论文