最小公倍數
既然想算最小公倍數,首先要清楚最小公倍數的求法,還有最大公約數的求法
最小公倍數*最大公約數=兩數乘積
有了公式,我們很清楚可以知道了,只要有最大公約數就可以求出最小公倍數,因爲兩數乘積肯定是已知的,所以下面將講解一下兩個數如何求最大公約數。
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!
總結
大家共同學習,寫錯的地方請提出謝謝。