定义两个int类型数字,求最大公约数。
定义两个int类型数字,求最小公倍数。
最大公约数定义以及算法思路列举
最大公约数(Greatest Common Divisor,简称GCD)指的是两个或更多个整数中能够同时整除它们的最大正整数。最小公倍数(Least Common Multiple,简称LCM)指的是能够被两个或更多个整数整除的最小正整数。
计算最大公约数的方法之一是使用欧几里得算法,也称为辗转相除法。该算法基于以下原理:两个数的最大公约数等于其中较小的数和两数的差的最大公约数。通过连续将较大的数除以较小的数并取余数,直到余数为0,此时较小的数就是最大公约数。
例如,计算两个数的最大公约数:
对于数字12和18,我们可以使用欧几里得算法来计算它们的最大公约数:
用18除以12,余数为6。
用12除以6,余数为0。
因为余数为0,所以最大公约数为6。
计算最小公倍数的方法之一是使用两个数的乘积除以它们的最大公约数,即LCM = (a * b) / GCD(a, b)。
继续以12和18为例,它们的最小公倍数可以通过公式计算得出:
LCM(12, 18) = (12 * 18) / 6 = 36
因此,数字12和18的最大公约数为6,最小公倍数为36。
最大公约数
import java.util.Random;
import java.util.Scanner;
public class Hmw09 {
public static void main(String[] args) {
/*
*9、定义两个int类型数字,求最大公约数。
*/
// TODO Auto-generated method stub
/* 方法一:
* 枚举
* 1.设i为2;
* 2.如果a和b都能被i
* 整除,则记下这个i
* 3.i加1后重复第2步,
* 直到i=a或b;
* 4.那么,曾经记下的
* 最大的可以同时整除a和b的i就是gcd(最大公约数)
* */
Scanner input=new Scanner(System.in);
System.out.println("请输入一个整数:");
int m=input.nextInt();
System.out.println("请再输入一个整数:");
int n=input.nextInt();
int gcd=1;
for(int i=2;i<=m && n>=i ; i++) {
if(m%i==0 && n%i==0) {
gcd=i;
}
}
System.out.println("整数:"+m+"整数"+n+ "最大公约数:"+gcd);
System.out.println("=======方法二=======");
/*
* 方法二:
* 辗转相除法
* 被除数a
* 除数b
* 余数r
* 1.如果b=0,那么最大公约数就是a
* 2.否则,计算a除以b的余数,让a等于b,b等于余数r
* 3.回到第一步
*
* =====================
* 被除数 | 除数 | 余数
* a | b | r
* 12 | 18 | 12
* 18 | 12 | 6
* 12 | 6 | 0
* 6 | 0 | 0
* */
System.out.println("请输入一个整数:");
int a=input.nextInt();
System.out.println("请再输入一个整数:");
int b=input.nextInt();
int ora=a;//初始值a
int orb=b;//初始值b
while(b!=0) {
int r=a%b;
System.out.println(r);
a=b;
b=r;
System.out.println("=======");
System.out.println(a);
System.out.println(b);
}
System.out.println("整数:"+ora+"整数:"+orb+"最大公约数:"+a);
}
}
最小公倍数
import java.util.Random;
import java.util.Scanner;
public class Hmw10 {
public static void main(String[] args) {
/*
*定义两个int类型数字,求最小公倍数。
*/
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
System.out.println("请输入一个整数:");
int m=input.nextInt();
System.out.println("请再输入一个整数:");
int n=input.nextInt();
int gcd=1;
for(int i=2;i<=m && n>=i ; i++) {
if(m%i==0 && n%i==0) {
gcd=i;
}
}
System.out.println("整数:"+m+"整数"+n+ "最大公约数:"+gcd + "最小公倍数:"+(m*n)/gcd );
}
}