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

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值