多個數求最小公倍數詳解!

                               最小公倍數


   既然想算最小公倍數,首先要清楚最小公倍數的求法,還有最大公約數的求法

   最小公倍數*最大公約數=兩數乘積

 有了公式,我們很清楚可以知道了,只要有最大公約數就可以求出最小公倍數,因爲兩數乘積肯定是已知的,所以下面將講解一下兩個數如何求最大公約數

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!

                                              總結

大家共同學習,寫錯的地方請提出謝謝。

 

 

 

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