如何求两个正整数最大公约数和最小公倍数。

这篇博客介绍了如何解决面试题中求两个正整数的最大公约数(GCD)和最小公倍数(LCM)。通过循环算法,不断用较大数除以较小数并取余,直到余数为0,此时的较大数即为最大公约数,两数乘积除以最大公约数得到最小公倍数。提供了详细的步骤解析及简单的Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  面试题目:输入两个正整数mn,求其最大公约数和最小公倍数。   
在循环中,只要除数不等于0用较大数除以较小的数将小的一个数作为下一轮循环的大数取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数
 
 分析: 首先这个题目读懂题意很重要,把这句话:"用较大数除以较小的数将小的一个数作为下一轮循环的大数取得的余数作为下一轮循环的较小的数"读懂这句这题就没有什么难度了,这句话翻译过来就是:
第一步:将较大的数 x,除以较小的数y ,并取余 k =x%y;
第二步:将第一步较小的数y作为这一轮的较大数,第一轮的余数 k做为这一轮的较小的数,然后以此循环.
   代码如下:为方便初学者阅读,代码比较简单易懂.
       @Test
     public void fun01() {
          Scanner sc = new Scanner(System.in);
          System.out.println("请输入一个正整数");
          int a=sc.nextInt();
          System.out.println("请再输入一个正整数");
          int b=sc.nextInt();
          //求最大公约数
          int n = fun(a,b);
          //最小共倍数数初始化
          int m =(a*b)/n;
          System.out.println("最大公约数:n ="+n);
          System.out.println("最小共倍数数初始化m ="+m);
     }
     public int fun(int x,int y){
          int t;
          //总是使x最大
          if(x<y){
              t=x;
              x=y;
              y=t;
          }
          //y不为0就一直循环
          while(y!=0){
              if(x==y){
                   return x;
              }
              int k =x%y;
              //小的数作为下一轮的大数
               x=y;
               //余数作为下一轮较小的数
               y=k;
          }
          return x;
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值