求多个数的最小公倍数

求三个数的最小公倍数的思路:
分解质因数,当剩下的三个数没有公因数时找两个数之间有没有公因数,再约,另一个不变。做到两两互质。再将因数,约分后的数相乘。
求最大公因数,就是看三个数都能除尽的最大的数
步骤:1 每两个数之间约到没有公因数,得到的数两两互质(重点 如何根据给的三个数得到两两互质的三个数)
      2 得到的两两互质的数相乘的结果就是三个数的最小公倍数
求两个数的最大公因数  两个数分别除以最大公因数,就得到了两个互质的数,两个互质的数相乘就得到了两个数的最大公倍数。
方法一:推荐该方法
import java.util.*;
//求两个数的公因数
public class Test1 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        int b=sc.nextInt();
        if(a<b)//两数最大数保存在 a中
        {
            int temp=b;
            b=a;
            a=temp;
        }
        
        int num1=a,num2=b;
        while(num2!=0)
        {
            int temp=num1%num2;
            num1=num2;
            num2=temp;
        }
        System.out.println("公因数是"+num1);

    }

}
上面程序求的两个数的公因数的方法主要在while循环中,其实while循环最多执行2次,当两个数有公因数不是两个数中的一个时时循环执行2次,当公因数时两个数之间的一
个时(也就是说一个数是另一个的倍数)
第一种情况(两个数的最大公因数不是两个数中的一个):以 14  12为例
   第一次执行:用14除以12的余数得到两个数之间除了最大公因数之外的因子的差距  14=2*7  7个2  12=2*6  6个2  最大公因数是12   也就是差了一个2
   第二次执行:让12除以两个数之间除了最大公因数之外的因子的差距 第二次执行后循环的条件就不满足了 12除以一个2的结果就是最大公因数
第二种情况(两个是的最大公因数是两个数中的一个):以27 9 为例
   第一次执行:用27除以9的余数为0  两个数除了最大公因子之外的因子不存在差距   循环条件不满足,9就是公因数
上面的程序如果要得到最小公倍数就输出a*b/最大公因数即可也就是输出a*b/num1;
方法二:
public class test15 {
 public static void main(String[] args) {
  int m=6,n=7;//两个数
  int M;//M放最小的那个数
  int x=0;

  M=m;
  if(m>n) M=n; //求出最小的数M

  for(int t=1;t<=M;t++)
  if(m%t==0&&n%t==0)//能同时被m和n整除的数赋值给x,虚幻到最后,得到的x就是最大公因数
  x=t; 
  System.out.print(x);
 }
}

求三个以上的数最小公倍数 下面的程序没有求几个整数的最大公因数,而是只求了两两之间的最大公因数
package lilu.gongbeishu;

import java.util.*;
//求多个数的最小公倍数
public class Test2 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        int  n=sc.nextInt();//n 个数求最小公倍数
        int[] a=new int[n];
        for(int i=0;i<n;i++)
        {
            a[i]=sc.nextInt();
        }
        
        int yinzi=1;
        
        for(int i=0;i<n-1;i++)
        {
            for(int j=i+1;j<n;j++)
            {
                int num1,num2;
                if(a[i]<a[j])//两数最大数保存在 num1中
                {
                    num1=a[j];
                    num2=a[i];    
                }
                else
                {
                    num1=a[i];   
                    num2=a[j];
                }    
                while(num2!=0)
                {
                    int temp=num1%num2;
                    num1=num2;
                    num2=temp;
                }
                a[i]/=num1;
                a[j]/=num1;
                yinzi*=num1;
                //System.out.println(i+" "+j+" "+a[i]+" "+a[j]+" "+yinzi);
            }
        }
        for(int i=0;i<n;i++)
        {
            yinzi*=a[i];
        }
        System.out.println("最小公倍数是"+yinzi);

    }

}


相同点:都用短除法,都要把所有的除数和商连乘起来。

不同点:求两个数的最小公倍数每次都用共有的质因数去除,除到两个商互质为止;求三个数的最小公倍数先用三个数的公有质因数去除,然后每两个数如果有公有质因数,再

用每两个数共有的质因数去除,一直除到每两个商是互质数为止。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值