方法一:
package com.lovo;
import java.util.Scanner;
/**
* 求n和m的最大公约数(相等法)
* 最小公倍数 = (n * m)/ 最大公约数
* @author 李睿
*
*/
public class Text01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入数A:");
long num1, num2, zdgys = 0 , i, temp;
if (sc.hasNextLong()) {
num1 = sc.nextLong();
System.out.print("请输入数B:");
if (sc.hasNextLong()) {
num2 = sc.nextLong();
//程序开始运算计时点
long start = System.currentTimeMillis();
// 从小到大排序
if (num1 > num2){
temp = num1;
num1 = num2;
num2 = temp;
}
for(i = 1; i <= num1; i++){
if (num2 % i == 0 && num1 % i ==0){
zdgys = i;
}
}
System.out.println("最大公约数为:" + zdgys + "\n" + "最小公倍数" + (num1 * num2) / zdgys);
//程序完成输出计时点
long end = System.currentTimeMillis();
System.out.println("执行时间" + (end - start) + "毫秒");
} else {
System.out.println("输入错误!");
}
} else {
System.out.println("输入错误!");
}
sc.close();
}
}
方法二:
package com.lovo;
import java.util.Scanner;
/**
* 求n和m的最大公约数和最小公倍数(辗转相除法)
* 最小公倍数 = (n * m)/ 最大公约数
* @author 李睿
*
*/
public class Text0101 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入数A:");
// 此处即为两种方法的不同之处,由于辗转相除法的num1和num2会参与运算,值就会与原值发生变化,
// 故此处多定义一个num11和num22来存放原有的num1和num2的值
long num1, num2, zdgys , ys, temp, num11, num22;
if (sc.hasNextLong()) {
num1 = sc.nextLong();
num11 = num1;
System.out.print("请输入数B:");
if (sc.hasNextLong()) {
num2 = sc.nextLong();
num22 = num2;
//程序开始运算计时点
long start = System.currentTimeMillis();
// 从大到小排序
if (num1 < num2){
temp = num1;
num1 = num2;
num2 = temp;
}
// 辗转相除法
ys = num1 % num2;
while (ys != 0){
num1 = num2;
num2 = ys;
ys = num1 % num2;
}
zdgys = num2;
System.out.println("最大公约数为:" + zdgys + "\n" + "最小公倍数" + (num11 * num22) / zdgys);
//程序完成输出计时点
long end = System.currentTimeMillis();
System.out.println("执行时间" + (end - start) + "毫秒");
} else {
System.out.println("输入错误!");
}
} else {
System.out.println("输入错误!");
}
sc.close();
}
}