java求两个数的最大公约数和最小公倍数

解题思路:
1.求最大公约数用辗转相除法。将较大的那个数对较小的那个数取余(如果a>=b,那就a%b),取余得出的结果为下次运算的除数,上面较小的那个数将作为被除数
直到运算到较小为0时,返回较大的数,这个数就是最大公约数。
2.最小公倍数就是 原来的两个正整数的积除以最大公约数

具体代码如下:

/*方法一:*/
package Main;

import java.util.Scanner;

public class Solution {
public static void main(String[] args) { 
    System.out.println("请输入两个整数:"); 
     Scanner input1 =new Scanner(System.in);
     int a = input1.nextInt(); 
     int b =input1.nextInt(); 
     int u= a*b; //  用u来保存 a*b 的值
     while(b>0) { 
     if(a>=b&&a%b!=0){ 
         int t = b;
         b = a%b; // 利用了递归算法
         a = t; 
     }else if(a%b==0){
         break; // a刚好是b的倍数 
     }else{ 
         int s = a; // 当  a < b 时 ,a b的值交换
         a = b;
         b = s; 
        }
     } 

     System.out.println("两个数的最大公约数为:"+b);
     System.out.println("两个数的最小公倍数为:"+u/b);
 }
     }

 /*方法二,欧几里德算法(辗转相除法)*/
 package Main;

import java.util.Scanner;

public class Solution {
     int divisor(int m,int n)//递归方法
     {
         if (m % n == 0) {
             return n;
         }
         else {
             return divisor(n,m % n);
         }
     }
public static void main(String[] args) { 
    System.out.println("请输入两个整数:"); 
     Scanner input1 =new Scanner(System.in);
     int a = input1.nextInt(); 
     int b =input1.nextInt(); 
     int u= a*b; //  用u来保存 a*b 的值
     Solution s = new Solution();
     int result;
     result = s.divisor(a, b);
     System.out.println("两个数的最大公约数为:"+result);
     System.out.println("两个数的最小公倍数为:"+u/result);
 }
     }

欧几里德算法介绍:
https://baike.baidu.com/item/%E6%AC%A7%E5%87%A0%E9%87%8C%E5%BE%B7%E7%AE%97%E6%B3%95?fr=aladdin

猜你喜欢

转载自blog.csdn.net/soda_lw/article/details/78268018