多个数求最小公倍数详解!

                               最小公倍数


   既然想算最小公倍数,首先要清楚最小公倍数的求法,还有最大公约数的求法

   最小公倍数*最大公约数=两数乘积

 有了公式,我们很清楚可以知道了,只要有最大公约数就可以求出最小公倍数,因为两数乘积肯定是已知的,所以下面将讲解一下两个数如何求最大公约数

1.辗转相除法(方法有很多,只介绍我会的,并且易懂的hhhh)

 

辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:

用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

好吧,定义总是那么的复杂且难懂,下面直接一张表格,实现一遍辗转相除法,聪明的你肯定一遍就看会!

               15                              55
                           15=15%55
                           10=55%15
                            5=15%10
                            0=10%5(最大公约数 5 )

如果你看懂了两个数如何求最小公倍数,那么求多个数的最小公倍数就不难了。

主要就是遵循一个准则:

先求前两个数的最小公倍,再用这个最小公倍数与下一个数求最小公倍数

再举一个例子求一下(5 7 15) 的最小公倍数
 

字迹可能有些潦草,但是很认真哈哈哈哈哈哈!

如果大致过程会了,代码肯定是会了

代码实现:


import java.math.BigInteger;
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        while (n-- > 0) {
            int k = sc.nextInt();
            int sum = 1;
            for (int i = 0; i < k; i++) {
                int p = sc.nextInt();
                sum *=  p / ff(sum, p);
            }
            System.out.println(sum);
        }
    }
    public static int ff(int x,int y){
        int r ;
        while(y!=0){
            r=x%y;
            x=y;
            y=r;
        }
        return x;

    }
    }

没有考虑大数的问题,根据题意选择long还是int。

下面介绍一个杭电oj的题目,因为你即使看的再懂不去实践也是不行的!

比如杭电的2028!

                                              总结

大家共同学习,写错的地方请提出谢谢。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章