求正整数的最大公约数与最小公倍数的一些方法总结

练习1:求最大公约数
import java.util.Scanner;

public class Divisor {
public static void main(String[] args) {
//第一步:键盘输入两个正整数m、n
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个正整数m=");
int m = input.nextInt();
System.out.println("请输入第二个正整数n=");
int n = input.nextInt();
int i;
//第二步:方法1:用辗转相除法求最大公约数
/* if(m > n){
while(m % n != 0){
i = m % n;
m = n;
n = i;
}
System.out.println("最大公约数是:" + n);
}else if(m < n){
while(n % m != 0){
i = n % m;
n = m;
m = i;
}
System.out.println("最大公约数是:" + m);
}else{
System.out.println("最大公约数是:" + m);
}*/
//对辗转相除法的改进
/*if(n > m){
m += n;
n = m - n;
m = m - n;
}//将n比m大时,交换m、n两个数字
while(m % n != 0){
i = m % n;
m = n;
n = i;
}
System.out.println("最大公约数是:" + n);*///不需要单独考虑m=n的情况
//方法2:辗转相减法求最大公约数
/* while(m != n){
if(m > n){
m = m - n;
}else if(m < n){
n = n - m;
}
}
System.out.println("最大公约数是:" + m);*/
//方法3:穷举法
/* for(i = m > n ? n : m;i >= 1;i--){
if(m % i == 0 && n % i == 0){
System.out.println("最大公约数是:" + i);
break;
}
}*/
//方法4:递归法
int result = Divisor.recursion(m,n);
System.out.println(result);
}

public static int recursion(int m, int n) {
if(n == 0){
return m;
}
return recursion(n, m%n);
}
}
练习2:求最小公倍数
import java.util.Scanner;

//练习:求两个正整数的最小公倍数
public class Multiple {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入第一个正整数:");
int m = input.nextInt();
System.out.print("请输入第二个正整数:");
int n = input.nextInt();
int i = 1;
//方法1:穷举法
/* for(i = m > n ? m : n;i <= m*n;i++){
if(i % m == 0 && i % n == 0){
System.out.println("最小公倍数是:" + i);
break;
}
}*/
//方法2:公式法:m和n的乘积等于它们最小公倍数与最大公约数的乘积
int result = Divisor.recursion(m, n);
System.out.println("最小公倍数是:" + m * n / result);

}
}
posted @ 2022-04-03 22:58  大白6809  阅读(365)  评论(0)    收藏  举报